PsyCamari: PHP vernünftig escapen?

Beitrag lesen

Sers,

ich versuche gerade Benutzereingaben für ein mini-selfmade Forum vernünftig zu escapen. Zum testen hab ich mal eine simple Funktion gebaut:

public function Escape($String) {  
		$String = $this->Link->real_escape_string($String);  
		$String = nl2br(htmlentities($String),ENT_QUOTES);  
		return $String;  
	}

$this->Link ist die mysqli-Instanz. Zur Erklärung: htmlentities encoded ja wirklich alle Entities, die es so gibt. real_escape_string encoded laut wiki NUL (ASCII 0), \n, \r, , ', ", and Control-Z und daher muss ich es benutzen, weil das nicht alles von htmlentities() abgedeckt wird. Jetzt habe ich folgendes Problem:

Ich gebe zum testen irgendeinen Schwachsinn ein.

EINS<br>
<br><br>
DREI
<p><br><br /><test>
FÜNF
<div></div><span><br>
LOL
ACHT

Wenn real_escape_string drauf angewendet wird, sieht es so aus:

EINS<br>
\r\n<br><br>
\r\nDREI
\r\n<p><br><br /><test>
\r\nFÜNF
\r\n<div></div><span><br>
\r\nLOL
\r\nACHT

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&lt;p&gt;&lt;br&gt;&lt;br /&gt;&lt;test&gt;<br />\r\nF&Uuml;NF<br />\r\n&lt;div&gt;&lt;/div&gt;&lt;span&gt;&lt;br&gt;<br />\r\nLOL<br />\r\nACHT

Jetzt frage ich mich:

1. Wieso werden nicht alle Zeichen umgewandelt? zb. <br /> bleibt <br /> anstatt umgewandelt zu werden.
2. 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? Tun sie aber nicht. Sie stehen dort genau so wie hier.

Was mache ich falsch?