Jörg Reinholz: PHP vernünftig escapen?

Beitrag lesen

Wenn real_escape_string drauf angewendet wird, sieht es so aus:

EINS<br>
\r\n<br><br>

...

Und wenn htmlentities und nl2br drauf angewendet wird sieht es so aus:

EINS&lt;br&gt;<br />\r\n&lt;br&gt;&lt;br&gt;<br />\r\nDREI<br />\r\n

...

Jetzt frage ich mich:

  1. Wieso werden nicht alle Zeichen umgewandelt? zb. <br /> bleibt <br /> anstatt umgewandelt zu werden.

Das ist einfach: Du wendest erst real_escape_string() an. Dann htmlentities(). Hierbei werden die <br> umgewandelt. Das findest Du auch in der Ausgabe: &lt;br&gt;. Doch dann kommt nl2br und fügt neue Umbrüche ein. Du hast nichts falsch gemacht.

  1. Die Sachen die encodet wurden zb. &lt;/div&gt; sind doch richtig encodet, sie müssten mir doch im Forum als <div> angezeigt werden, oder?

Nur wenn die Anzeige als HTML (und also nicht als HTML-Quell-Text) erfolgt erfolgt und nur wenn der String nicht nochmals durch htmlspecialchars gejagt wird. Du hast den Text sozusagen falsch betrachtet, aber das liegt außerhalb der für uns sichtbaren Programmteile.

Jörg Reinholz