dedlfix: Verschachteln von Quotes in PHP

Beitrag lesen

Hi!

echo "OnMouseOver=\"Tip('$slot_descr[$count]<br><br><img align=\'right\' src=\'./icons/del.png\' onclick=\'document.getElementById($count).style.background=none;\'>',TITLE, '$slot_name[$count]', DELAY, 1000, FOLLOWMOUSE, false, PADDING, 5,CLICKCLOSE,true,STICKY, true)\" onmouseout=\"UnTip()\"";
Um dieses onclick zum Funktionieren zu bringen, müsste ich das none in anführungszeichen setzen.... Da ich jedoch bereits ", ", ' und ' verwendet habe, kann ich hier keine der eben genannten Quotes verwenden.
Hat hierzu jemand eine passende Lösung parat?

Löse solche Knoten von innen nach außen auf. Zunächst möchtest du einen Wert in ein bestimmtes System einfügen. Dazu musst du dessen Regeln kennen, wie welche Zeichen notiert werden müssen, damit sie am Ende als ein bestimmte Zeichen interpretiert werden und nicht vielleicht als Steuerzeichen oder andere mit besonderer Bedeutung. Dieser Vorgang nennt sich Maskieren (oder Escapen). Wenn du diesen so behandelten Wert in einen Code-Kontext einfügen möchtest, werden er im Allgemeinen mit Begrenzungszeichen eingefasst - Quotieren genannt. Nun hast du ein Gebilde aus Code und (hoffentlich) korrekt notierten Daten. Dieses Gebilde möchtest du in einen weiteren Kontext einfügen. Dabei gehst du genauso vor, betrachtest das Gebilde aber rein als Daten. Die Zeichen, die im inneren Kontext eine Sonderbedeutung haben, interessieren nicht als solche. Vielmehr wird jedes Zeichen einzeln betrachtet und gemäß den Regeln den neuen Kontexts behandelt. Ein inneres " wird als \ und " gesehen und als \ und " notiert, wenn die Regeln des äußeren Kontexts einen vorangestellten Backslash vorsehen.

Dass du mit ' und " zwei verschiedene Quotierungen zur Verfügung hast, die unmaskiert in zwei Systemen verschachteln kannst, steht auf einem anderen Blatt.

Eine weitere Möglichkeit, Daten zu schachteln, und dies noch dazu übersichtlicher als ein großes Gebilde, bietet die Funktion sprintf(). Notiere zunächst den feststehenden Teil und einen Platzhalter %s (gegebenenfalls mit Quotierzeichen drumrum. Die Werte werden dann anschließend mit der passenden Behandlungsfunktion angegeben. Beispielsweise so:

$html = sprintf('<input type="text" name="foo" value="%s">', htmlspecialchars($foo));

Auch das kann man schachteln. $html wird dann in dem anderen Kontext ähnlich behandelt wie $foo im eben gezeigten Beispiel.

Lo!