Javascript ignoriert einfach htmlentities****?

TribunM

Erfahrenes Mitglied
Hallöle,

Folgendes Problem. Ich möchte per Javascript an eine Funktion eine Variable weitergeben, die auch HTML enthalten kann.

In php wird der String encodiert:
PHP:
$string = htmlentities($aCell[$a],ENT_QUOTES,UTF-8);

und dann an javascript übergeben:

HTML:
<span style="color:#97BC09;cursor:pointer" onclick="javascript:show_desc('{$string}');">

Jetzt ist es so, dass wenn ich ' & " , sprich beide Quotes habe, die zwar richtig encodiert werden und $string = &quot;' ist.

ABER Firebug sagt mir immer :
unterminated string literal
[Break on this error] javascript:show_desc('"'');

Er übersetzt also die Quotes. WIESO ****? Ich schnall das nicht. Wofür codiere ich den Mist denn dann.

EDIT

Wie ich jetzt festgestellt habe, funktioniert es, wenn ich das & austausche zu &amp;

Dennoch verstehe ich nicht warum, der die Quotes nciht so nimmt, wie sie encodiert werden.

Danke Tribbi
 
Zuletzt bearbeitet:
Was du machst escaped die Sachen nur für HTML. Wenn du es in dem JavaScript String escapen willst, musst du das mit einem Backslash machen.
 
Wenn du innerhalb eins HTML-Attributes die Anführungsstriche escapest, machst du das ja, um ihnen die besondere Bedeutung zu nehmen. Sonst würde ja das Attribut zu früh geschlossen werden und dadurch der Teil danach ungültig.

HTML:
<!--Das hier ist ungültig-->
<input value="Ich bin "geil"!" />
<!--das aber okay-->
<input value="Ich bin &quot;geil&quot;!" />

Das Problem mit deinem JavaScript sieht entsprechend so aus.

HTML:
<!--Das HTML ist korrekt, aber der JavaScript Aufruf nicht.-->
<input type="button" value="Drück mich!" onclick="foobar('Ich bin 'geil'!')" />
<!--Das HTML ist korrekt, aber der JavaScript Aufruf IMMER NOCH nicht, weil das HTML-Entity nur den HTML-Parser interessiert und das JavaScript aber ein "normales" Hockomma bekommt.-->
<input type="button" value="Drück mich!" onclick="foobar('Ich bin 'geil'!')" />
<!--Jetzt ist es korrekt-->
<input type="button" value="Drück mich!" onclick="foobar('Ich bin \'geil\'!')" />
<!--Das hier auch-->
<input type="button" value="Drück mich!" onclick="foobar(&quot;Ich bin \&quot;geil\&quot;!&quot;)" />
 
aah das meinst du. Hm hätte man auch eher draufkommen können ^^. Dann sollte ich das in Kombination mit htmspecialcahrs und NOQUOTES nutzen, damit die Quotes dann geslashed werden?

Danke das probiere ich dann mal aus.

EDIT

Ne das funktioniert mit addsplashes auch nicht.Wenn ich z.B.
Code:
<td><a onclick="return amz_js_PopWin(this.href,'test')";
nehme und den richtig konvertiere:
Code:
&lt;td&gt;&lt;a onclick=&quot;return amz_js_PopWin(this.href,\'test\')&quot;;

,kommt aber nur das an:
Code:
<td><a onclick="return amz_js_PopWin(this.href,


Er schneidet also bei \' ab. Wieso? Das sollte doch so funktionieren, wenn ich das richtig verstanden habe.
Was läuft hier verkehrt?

Ich kann natürlich mit strstr arbeiten, was ber bei einem langen string nicht wirklich performant ist.
 
Zuletzt bearbeitet:
Addslashes macht für den Zweck zu viel. Du musst nur die einfaches Hochkommas escapen.

PHP:
$string = htmlentities(str_replace("'", "\'", $aCell[$a]), ENT_QUOTES, UTF-8);
 
Das hatte ich schon versucht aber er bricht immer noch an der Stelle ab.

Nur wenn ich z.B. $string = str_replace("'", "*", $string); verwende oder etwas ähnliches, macht der das. Er mag wohl das \' nicht.

Lol ich hätte mal sagen sollen, dass ich das ganze per get an eine zweite Seite übertrage. Das ändert natürlich Einiges....

Habe ich total vergessen und dann sieht die Geschichte auch so aus:

HTML:
www.meineadresse.de?value=%3Ca%20onclick=%22return%20amz_js_PopWin(this.href,*AmazonHelp*,*width=700,height=600,resizable=1,scrollbars=1,toolbar=1,status=1*);22%20href=%22http://www.amazon.de/gp/product/images/B002HHCANY/sr=8-12/qid=1276859409/ref=dp_image_0?ie=UTF8&n=562066&s=ce-de&qid=1276859409&sr=8-12%22&

Gibt es eine andere/bessere Möglichkeit das ganze zu übertragen? Weil ich denke das die Art und Weise, wie ich das jetzt vorhabe sowieso nicht gerade die beste Idee war, wenn ich mir das so recht überlege.
 
Zuletzt bearbeitet:
Naja die Geschichte mit get war ne unschöne Idee. Werde jetzt eine temporäre Tabelle dazu verwenden.

Wenn noch wer eine weitere, evtl. bessere Art weiß, nur her damit.
 
Lol ich hätte mal sagen sollen, dass ich das ganze per get an eine zweite Seite übertrage. Das ändert natürlich Einiges....

Eigentlich nicht. Denn das was wir hier besprochen haben passiert ja auf der Empfänger-Seite. Vorrausgesetzt dort kommt alles korrekt an (was ja weder mit htmlentities noch mit js-Maskierung zu tun hat) spielt es ja keine Rolle, woher der String kommt.

http://php.net/manual/en/function.urlencode.php
http://www.php.net/manual/en/function.urldecode.php
 

Neue Beiträge

Zurück