Geistiger Hohlraum: Formular senden an Frameset -> Strings escaped

Beitrag lesen

(<frame src="main.php?str=$str>). Damit aber nicht einfach irgendwelche Sonderzeichen verschwinden oder komisch escaped werden muss ich mich da ja drum kümmern, doch bei all der Fülle an Funktionen ("urlencode", "addslashes", "htmlentities",...) verlier ich leicht die Übersicht und wollte mal nachhaken wie ihr das machen würdet.

urlencode() kodiert einen ganzen Haufen Zeichen (http://www.faqs.org/rfcs/rfc2396.html, 2.4) in eine Zeichenkette bestehend aus dem Prozentzeichen und dem Zeichencode im Hexadezimalformat ("%3F"). Diese Form ist für URLs vorgesehen, eignet sich aber für die meisten Fälle, in denen Textdaten durch unsichere Kanäle (sicher im Sinne von "was rein geht, kommt auch wieder raus") übertragen werden müssen.

addslashes() stellt einigen, wenigen Zeichen einen Rückstrich voran, um zu verhindern, dass sie ihre ursprünglich angedachte Funktion ausführen, dabei geht es hauptsächlich um die Anführungszeichen. Diese Form ist nur für Anwendungen interessant, denen Befehle in Textform übergeben werden, um Befehlsteil vom Datenteil unterscheiden zu können. SQL-Datenbanken sind so ein Fall (INSERT INTO tabelle SET name="Hans "Guck-in-die-Luft" Normaluser", alter=23;).

htmlentities() sorgt dafür, dass Nicht-US-ASCII-Zeichen sowie <, > und & durch entsprechende HTML-Maskierungen ersetzt werden (ü = &uuml;). Diese Form ist nur für HTML-Quelltext gedacht.

Für Deine Anwendung musst Du in jedem Fall die Daten mittels urlencode() behandeln:

$adresse = "main.php?str=" . urlencode($str);

Gibst Du die erzeugte Adresse anschließend in einen HTML-Quelltext aus, muss sie noch durch htmlentities() verarbeitet werden:

echo "<frame src="" . htmlentities($adresse) . "">";

Es ist übrigens ein sehr häufiger Fehler, URLs mit Parametern im HTML-Quelltext nicht mittels htmlentities() bzw. entsprechend manuell zu behandeln. Folgendes ist falsch:

<frame src="main.php?str1=bla&str2=blabla">

Richtig wäre:

<frame src="main.php?str1=bla&amp;str2=blabla">