Gast: Zeichenumwandlung schlägt fehl

Hallo,

wenn ich in HTML den $tring = "Gerda's Gast"; ausgeben möchte, macht es Sinn, Gänsefüsse umzuwandeln:
echo htmlspecialchars($tring);

Nun soll dieser String per Javascript ausgegebn werden und ergibt promt den Fehler
Syntax error at line 1 in event handler: expected ')', got 's'
\n'   +'user=[Gerda's gast]\n'   +'sprac
--------------------^

Wenn ich mir aber den Quellcode der HTML-Datei ansehe, steht dort wie erwartet
+'user=[Gerda's gast]\\n' \

Wie bekomme ich nun das ' über PHP und Javascript auf das Display?

Gruß, Gast

  1. habe jetzt dieses im Javascript-Bereich probiert:
    +'user=[<? echo addslashes(htmlspecialchars_decode($tring,ENT_QUOTES)); ?>]\\n' \

    Erwarten würde ich, dass &#039; zu ' geworden wäre. Bleibt aber bei &#039;

    1. sorry, habe den alten Quellcode zitiert, jetzt steht ' tatsächlich in der  Javascript-Ausgabe. Trotzdem bleibt die Javascript-Fehlermeldung.

      Gast

  2. Hi,

    du escapest das HTML, nicht das Javascript.
    In Javascript escaped man mit Backslash:

    +'user=[Gerda's gast]\n'

    \n sieht auch nicht besonders sinnvoll aus.

    ~dave

    1. Hi,

      du escapest das HTML, nicht das Javascript.
      In Javascript escaped man mit Backslash:

      +'user=[Gerda's gast]\n'

      Habe ich probiert, siehe 13:09

      \n sieht auch nicht besonders sinnvoll aus.

      In Javascript ist \n ein Zeilenumbruch und das \ muss escaped werden, also \n - das funktioniert.

      Gast

      1. In Javascript ist \n ein Zeilenumbruch und das \ muss escaped werden, also \n - das funktioniert.

        nein

        überdies muss nicht jeder Zeilenumbruch "sinnvoll" sein.

        Logiker

  3. Wie bekomme ich nun das ' über PHP und Javascript auf das Display?

    In dem Du das Zeichen entweder
     1) mit einem Backslash maskierst oder
     2 einen alternantiven Stringbegrenzer verwendest.

    Gehe bei 1 von hinten nach vorn durch:

    Ausgabe: Gerda's Skript
    Java-Skript: alert('Gerda\'s Skript');
    PHP: print '<script type=\'text/javascript\'>alert alert(\'Gerda\\\'s Skript\');';

    Suit wird Dir mitteilen, Du sollst den Kontextwechsel beachten. Damit hat er recht. Befasse Dich mit dem Thema.

    Was jetzt die Umwandlung in das Entity &#39; betrifft, so sollte das eigentlich funktionieren. Bei mir funktioniert jedenfalls:

    <?php  
    print '<html>  
    <div id=\'Ausgabe\'></div>  
    <script type=\'text/javascript\'>document.getElementById(\'Ausgabe\').innerHTML=\'Gerda&#039;s Skript\';</script>  
    </html>';  
    ?>
    

    als auch:

    <?php  
    print '<html>  
    <div id=\'Ausgabe\'></div>  
    <script type=\'text/javascript\'>document.getElementById(\'Ausgabe\').innerHTML=\'Gerda\\\'s Skript\';</script>  
    </html>';  
    ?>
    

    was zu folgendem HTML-Code in der Ausgabe führt:

    <html>  
    <div id='Ausgabe'></div>  
    <script type='text/javascript'>document.getElementById('Ausgabe').innerHTML='Gerda\'s Skript';</script>  
    </html>
    

    Fred

  4. Hi,

    so bescheuert wie es aussieht, aber so funzt es ohne Javascript-Fehler:

    $tring = "Gerda's Gast";

    Vor der Ausgabe wandle ich im PHP-Programm grundsätzlich Sonderzeichen:
    $tring = htmlspecialchars ($tring,ENT_QUOTES);

    Aber nun brauche ich davon eine Ausgabe im Javascript-Umfeld, da muss ich das wieder rückgängig machen:

      +'user=[<? echo addslashes(addslashes(htmlspecialchars_decode($tring,ENT_QUOTES))); ?>]\\n' \  
    
    

    Im Quellcode steht nun
    +'user=[remso\\\'s gast]\\n' \

    Ein Hoch den Irren!

    Gast

    1. Hi,

      so bescheuert wie es aussieht, aber so funzt es ohne Javascript-Fehler:

      $tring = "Gerda's Gast";

      btw, richtig müsste es heissen: Gerdas Gast
      siehe http://de.wikipedia.org/wiki/Apostrophitis

      Vor der Ausgabe wandle ich im PHP-Programm grundsätzlich Sonderzeichen:
      $tring = htmlspecialchars ($tring,ENT_QUOTES);

      und hier liegt der Fehler. Warum tust du das? Warum nutzt du eine Brechzange?
      Warum nutzt du htmlspecialchars() in einem JavaScript-Umfeld?

      Logiker

      1. Hi,

        $tring = "Gerda's Gast";

        btw, richtig müsste es heissen: Gerdas Gast
        siehe http://de.wikipedia.org/wiki/Apostrophitis

        ---------------------^^

        I know this very special case, the german language. But "Jeromy's guest" must be possible in a program.

        Vor der Ausgabe wandle ich im PHP-Programm grundsätzlich Sonderzeichen:
        $tring = htmlspecialchars ($tring,ENT_QUOTES);

        und hier liegt der Fehler. Warum tust du das? Warum nutzt du eine Brechzange?
        Warum nutzt du htmlspecialchars() in einem JavaScript-Umfeld?

        Alte Regel: EVA - Eingabe - Verarbeitung - Ausgabe.
        Die Ausgabe ist zu 99% HTML, nur in Ausnahmefällen muss nach Javascript gewandelt werden. Dafür habe ich aber nicht extra ein Prinzip EV[A,J] gemacht.

        Gast

        1. so wars gemeint:
          Nein, so war's gemeint:

          btw, richtig müsste es heissen: Gerdas Gast
          siehe http://de.wikipedia.org/wiki/Apostrophitis
          ---------------^^

        2. Hi,

          Alte Regel: EVA - Eingabe - Verarbeitung - Ausgabe.
          Die Ausgabe ist zu 99% HTML, nur in Ausnahmefällen muss nach Javascript gewandelt werden. Dafür habe ich aber nicht extra ein Prinzip EV[A,J] gemacht.

          Dann hast Du den Fehler gemacht, die Ausgabe (die Aufbereitung mit html_special_chars gehört dazu) mit der Verarbeitung zu vermischen.

          cu,
          Andreas

          --
          Warum nennt sich Andreas hier MudGuard?
          O o ostern ...
          Fachfragen per Mail sind frech, werden ignoriert. Das Forum existiert.
        3. I know this very special case, the german language. But "Jeromy's guest" must be possible in a program.

          und das berechtigt dich, Rechtschreibfehler zu begehen oder wie? Seltsame Logik. Bei "Jeromy's guest" hätte ich nicht gemeckert.

          Vor der Ausgabe wandle ich im PHP-Programm grundsätzlich Sonderzeichen:
          $tring = htmlspecialchars ($tring,ENT_QUOTES);

          und hier liegt der Fehler. Warum tust du das? Warum nutzt du eine Brechzange?
          Warum nutzt du htmlspecialchars() in einem JavaScript-Umfeld?

          Alte Regel: EVA - Eingabe - Verarbeitung - Ausgabe.

          und Ausgabe bedeutet für dich: erstmal alles überall in HTML rauszuhauen? Brechstange, ich sagte es ja bereits.

          Die Ausgabe ist zu 99% HTML, nur in Ausnahmefällen muss nach Javascript gewandelt werden. Dafür habe ich aber nicht extra ein Prinzip EV[A,J] gemacht.

          Du hast EVA nicht verstanden. Du hast ein grundlegendes Verständnisproblem.

          1. und das berechtigt dich, Rechtschreibfehler zu begehen oder wie? Seltsame Logik. Bei "Jeromy's guest" hätte ich nicht gemeckert.

            Ich habe als Programmierer das Recht, Rechtschreibehler durchzureichen.

            Vertrittst du als Logiker den Standpunkt, dass eine falsche Schreibweise von Texten zum Programm-Absturz führen darf/muss/sollte?

            Mal sehen, wie die SELFHTML Software mit Rechtschreibehlern umgeht:

            Rechtschreibehler - Rechtschreibehler - Rechtschreibehler

            Haha, gleich beim Absenden des Formulars bringe ich den Server zum Abstürzen.

            Gast

            1. und das berechtigt dich, Rechtschreibfehler zu begehen oder wie? Seltsame Logik. Bei "Jeromy's guest" hätte ich nicht gemeckert.

              Ich habe als Programmierer das Recht, Rechtschreibehler durchzureichen.

              sofern du sie nicht an mich durchreichst, sei dir das gegönnt. Ich habe dich lediglich auf einen Rechtschreibfehler hingewiesen. Und das auch nur nebenbei.

              Vertrittst du als Logiker den Standpunkt, dass eine falsche Schreibweise von Texten zum Programm-Absturz führen darf/muss/sollte?

              Nein. Wie kommst du darauf? Ich habe gemeckert, aber ich bin keine Maschine.

              Logiker

    2. Ein Hoch den Irren!

      Nein, das Programmieren selbst ist hochgradig stures Verwalten und Notieren.

      Vor der Ausgabe wandle ich im PHP-Programm grundsätzlich Sonderzeichen:

      Was Du machst ist letztendlich:
      $string = htmlspecialchars_decode(htmlspecialchars ($tring,ENT_QUOTES));

      Das ist  allerdings irre. Mach das noch so 3-10 Mal um zu dem Ergebnis zu kommen, dass Du hinterher immer den selben $string hast und nenn Dich "Mr. Performancebremse" :)

      Merke: Unnötiger Code ist auch eine nicht zu vernachlässigende Fehlerquelle. Du gibst zum Beispiel nicht an, wie das Dokument oder Deine kodiert sind...

      Fred

      1. Hallo Fred,

        Ein Hoch den Irren!

        Nein, das Programmieren selbst ist hochgradig stures Verwalten und Notieren.

        Genau das meine ich ja. Ich habe mal einen Irren gekannt, der hat stundenlang hochgradig stur dieselbe Stelle des Fußbodens mit dem Bohnerklotz bearbeitet. Ist lange her, heute kennt man keine Bohnerklötze mehr und die Irren heissen jetzt auch anders, "Bewohner" glaube ich.

        Was Du machst ist letztendlich:
        $string = htmlspecialchars_decode(htmlspecialchars ($tring,ENT_QUOTES));

        Das ist  allerdings irre.

        Ja, ich bin Bewohner meiner Zweiraumwohnung.

        Mach das noch so 3-10 Mal um zu dem Ergebnis zu kommen, dass Du hinterher immer den selben $string hast und nenn Dich "Mr. Performancebremse" :)

        Leider fehlt mir das Geld, Aktien zu kaufen, zu verkaufen, zu kaufen, ... um mit Glück hinterher genau so viel Wert zu haben wie zuvor. Da tobe ich mich halt im Internet aus. Hätte ja keiner gemerkt, wenn ich hier nicht gebeichtet hätte ;-)

        Merke: Unnötiger Code ist auch eine nicht zu vernachlässigende Fehlerquelle. Du gibst zum Beispiel nicht an, wie das Dokument oder Deine kodiert sind...

        Joop - habe ich gemerkt.

        Gast

  5. @@Gast:

    nuqneH

    wenn ich in HTML den $tring = "Gerda's Gast"; ausgeben möchte

    Warum solltest du das möchten?

    Wie schon gesagt, ist es ein Schreibfehler. Und selbst wenn: You (probably) don’t need to escape quotes in strings. Auch auch keine Apostrophe, wenn’s denn die richtigen sind.

    Bei nutzergenerierten Inhalten könnte man auch erwägen, ' und " durch die richtigen Zeichen zu ersetzen. Bei Zielgruppen, deren Inhalte durchaus auch Code sein können, nicht die beste Idee.

    Qapla'

    --
    „Perfektion ist nicht dann erreicht, wenn es nichts mehr hinzuzufügen gibt, sondern wenn man nichts mehr weglassen kann.“ (Antoine de Saint-Exupéry)