Zeichenumwandlung schlägt fehl
Gast
- php
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
habe jetzt dieses im Javascript-Bereich probiert:
+'user=[<? echo addslashes(htmlspecialchars_decode($tring,ENT_QUOTES)); ?>]\\n' \
Erwarten würde ich, dass ' zu ' geworden wäre. Bleibt aber bei '
sorry, habe den alten Quellcode zitiert, jetzt steht ' tatsächlich in der Javascript-Ausgabe. Trotzdem bleibt die Javascript-Fehlermeldung.
Gast
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
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
In Javascript ist \n ein Zeilenumbruch und das \ muss escaped werden, also \n - das funktioniert.
nein
überdies muss nicht jeder Zeilenumbruch "sinnvoll" sein.
Logiker
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 ' 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'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
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
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
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
so wars gemeint:
Nein, so war's gemeint:
btw, richtig müsste es heissen: Gerdas Gast
siehe http://de.wikipedia.org/wiki/Apostrophitis
---------------^^
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
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.
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
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
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
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
@@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'