Problem mit Hochkomma bei Übergabe von PHP nach JS

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Problem mit Hochkomma bei Übergabe von PHP nach JS

    Hallo liebe Leute,

    ich habe folgendes Phänomen:

    Ich lese mehrere Dateien per PHP in ein zweidimensionales PHP Array


    for ($i = 0;$i < count($txtpfadarray);$i++)
    {
    $str = implode("", @file($txtpfadarray[$i])); // Textdatei auslesen
    $str = str_replace("\n","",$str); // string von Umbruechen befreien
    $str = str_replace("\r","",$str); // string von Umbruechen befreien

    $begleittext = explode (",", $str); // in 1dim Array packen
    for($k = 0;$k < count($begleittext);$k++) // in 2dim Array packen
    $phptxtarray[$i][$k] = $begleittext[$k];
    }

    Ich habe es auch mit strafferem Code versucht, darum geht es hier auch nicht, dieser Code funktioniert und alles, was kürzer war, hat nicht zuverlässig gearbeiet.

    Später im Programm übergebe ich dieses Array an JS

    <script type="text/javascript">
    <!--
    jstxtarray= new Array();

    <?php
    for($i=0;$i<count($myphp2dimarray);++$i)
    {
    print "jstxtarray[$i] = new Array('".implode("','", $phptxtarray[$i])."');\n";
    }
    ?>
    //-->
    </script>


    Auch das funktioniert soweit. Bevor ich auf diese Lösung gekommen bin, hatte ich eine andere, nämlich

    <script type="text/javascript">

    jstxtarray[0] = new Array("<?php print(implode('","', $phptxtarray[0])); ?>");
    jstxtarray[1] = new Array("<?php print(implode('","', $phptxtarray[1])); ?>");

    //-->
    </script>

    Mir war bis dahin nicht klar, wie man beide Inkremente hochzählen kann, daher diese Bastellösung, wo jedes Arrayelement einzeln übergeben wird.

    Aber nun kommt das, was ich nicht verstehe.

    In einer meiner eingelesenen Textdateien gibt es einen Namen, der ein Hochkomma enthält - O' Neal

    Bei meiner Bastellösung gab es kein Problem mit O' Neal
    Bei der PHP Lösung bekam ich einen Fehler, der erst dann verschwand, als ich in der TXT Datei das Hochkomma maskiert habe. In der Datei steht also nun O\\' Neal. Das funktioniert, ist aber unbefriediegend. Nun habe ich versucht, beim Einlesen der Datei das Hochkomma durch ein maskiertes Hochkomma zu ersetzen.

    etwa so.

    $str = str_replace("'","\\'",$str);

    Und da habe ich etliche Kombinationen durchprobiert, die aber allesamt offenbar falsch sind.

    Nun habe ich zwei Fragen.

    1. Kann mir jemand sagen, warum es bei meiner Bastellösung ohne Maskerade funktioniert und bei der php Lösung nicht?
    2. Gibt es bei der php Stringbehandlung eine Möglichkeit, das Hochkomma so zu maskieren, dass die PHP Lösung im Java Script funktioniert?

    Ich möchte nach Möglichkeit nicht die Originaldatei editieren müssen.

    Schöne Grüsse aus HH

    Rudolf

  • #2
    $str = str_replace("'","\'",$str);
    Bei deiner "Lösung" wird das Hochkomma nur in PHP maskiert.

    Um es in Javascript zu maskieren, muss in PHP das Backslash escaped werden:
    $str = str_replace("'","\\'",$str);
    mein Sport: mein Frühstück: meine Arbeit:

    Sämtliche Code-Schnipsel sind im Allgemeinen nicht getestet und werden ohne Gewähr auf Fehlerfreiheit und Korrektheit gepostet.

    Kommentar


    • #3
      Funktioniert auch nicht

      Hallo Titus,

      vielen Dank für die schnelle Antwort, aber leider funktioniert es so auch nicht. Diese Kombination hatte ich schon ausprobiert.

      Am String einlesen kann es nicht liegen, der wird korrekt eingelesen, sonst könnte meine Bastellösung nicht funktionieren.. Der replace bei den anderen Sonderzeichen funktioniert einwandfrei, nur dieses Hochkomma will nicht so, wie ich es will. Ich bekomme auch keine Fehlermeldung, nur diesen kleinen gelben Hinweis: Fehler in javascript. Ich beschäftige mich erst seit paar Tagen mit Internetprogrammierung und vermisse doch sehr den Debugger, wo man sehen kann, wo der Fehler steckt. Oder gibt es für PHP und Javascript sowas auch? Alert und echo funktionieren ja auch nur dann, wenn dieser kleine gelbe Teufel nicht vorher schon tätig geworden ist. Der php Code ist überdies in <head> und da ist echo nicht wirklich nützlich. ich kann den Code zwar auch in <body> laufen lassen, ist aber nicht schön.

      Schönen Gruß

      Rudolf

      Kommentar


      • #4
        Ich beschäftige mich erst seit paar Tagen mit Internetprogrammierung und vermisse doch sehr den Debugger, wo man sehen kann, wo der Fehler steckt.
        Nimm den Firefox, unter "Extras" wirst du die JS-Konsole finden!

        PHP hat seinen Parser, der Meldet sich schon, wenn dem was nicht passt.

        wüsste nicht, wieso titus version nicht laufen sollte. kannste mal code und testausgaben zeigen?

        Der php Code ist überdies in <head> und da ist echo nicht wirklich nützlich.
        Das ist doch unsinn! Guck in den Quelltext! Nur weil eine Ausgabe nicht auf dem Bildschirm erscheint, heißt das nicht, dass sie nicht vorhanden ist!
        Zuletzt geändert von TobiaZ; 03.06.2005, 16:19.

        Kommentar


        • #5
          Alles gefunden

          Hallo TobiaZ,

          abgesehen davon, dass ich es nicht schön finde, dass Du von Unsinn redest, wenn jemand etwas noch nicht so gut kennt wie Du und der sich darüber hinaus als Newbie in diesem Umfeld geoutet hat, danke ich auch Dir für Dein Interesse. Ich habe den Fehler gefunden. Tatsächlich funktioniert die Maskierung doch so, wie Titus es dankenswerterweise geschrieben hat. Das Dumme war nur, dass in der Textdatei die Zeichenfolge \' an einer anderen Stelle vorkam, also ein maskiertes Hochkomma, das der replace dann natürlich nicht für JS passend maskiert hat. So bin ich praktisch auf den gleichen Fehler gelaufen wie vorher, nur an einer anderen Stelle in der Datei. Ohne den Code von Titus bin ich an dem nicht maskierten Hochkomma aufgelaufen und mit dem Code bin ich an dem maskierten Hochkomma aufgelaufen. Da haben wir auch die Antwort auf Deine Frage - der Code hat nicht funktioniert, weil die Datei an einer Stelle ein Hochkomma und an einer anderen Stelle ein maskiertes Hochkomma enthält. Eine tückische Falle. Immerhin hat die Datei 620 Zeilen a' ca. 100 Zeichen, da sieht man sowas nicht auf den ersten Blick . Nun habe ich dafür gesorgt, dass maskierte Hochkommata erst demaskiert werden und dann mit den nicht maskierten Hochkommata zusammen für JS maskiert werden und ich denke, dass ich so auf der sicheren Seite bin.

          Hallo Titus,

          ich nehme alles zurück und behaupte das Gegenteil. Dein Code funktoniert bestens und ich hoffe, dass Du mir es nicht verübelst, dass ich auf diese Falle in der Datei reingefallen bin. Jedenfalls vielen Dank für Deine Hilfe.

          Schöne Grüße

          Rudolf


          und das letzte Problem für meine Site ist gelöst. Yeehooo!

          Kommentar

          Lädt...
          X