[PHP] Zusammenarbeit mit (X)HTML

  • Guten Abend liebe Community,


    Ich will euch Heute Abend (wie in der Überschrift beschrieben) die zusammenarbeit zwischen PHP und (X)HTML näher bringen.
    PHP wird überlicherweise zusammen mit (X)HTML eingesetzt, deswegen gibt es natürlich genau darauf spezialisierte Funktionen.
    Die spitzen Klammern haben in (X)HTML eine besondere Bedeutung, denn dadurch werden Tags gekennzeichnet. Auch das &-Zeichen hat eine spezielle Funktion: Es dient zur Anleitung von Entities wie ä. Wenn man diese Zeichen nicht für Tags oder Entities benutzen will, sondern normal im Text ausgeben, muss man stattdessen Entities verwenden. Dafür kann man htmlspecialchars() benutzen. Die Funktion htmlspecialchars()wandelt alle (X)HTML spezifischen Sonderzeichen um. Dabei werden folgende Ersetzungen durchgeführt:

    • & wird zu &
    • < wird zu &gt;
    • > wird zu &gt;
    • " wird zu &quot;

    htmlspecialchars() erwartet als ersten Parameter Text, der behandelt werden muss. Über einen zzweiten Parameter kann man die Behandlung von Anführungszeichen über Konstante festlegen. Diese können folgende Werte haben:

    • ENT_QUOTES: Beide Anführungszeichen werden umgewandelt,d.h. zusätzlich zu den oben geschilderten auch einfache Anführungszeichen.
    • ' wird zu &#039;
    • ENT_NOQUOTES: Keines der Anführungszeichen wird umgewandelt.
    • ENT_COMPAT ist der Standard: Die doppelte Anführungszeichen werden transfomiert, die einfachen nicht.

    Beim folgenden Beispiel führe ich den Einsatz von htmlspecialchars() mit den verschiedenen Optionen vor. Außerdem wird die Funktion htmlspecialchars_decode() eingesetzt, die die Umwandlung von htmlspecialchars() rückgängig macht. Sie steht seit PHP 5.1 zur Verfügung. Nun zum Beispiel:


    PHP
    $behauptung = "2 < 4 && \"5\ == '5' ";
    echo htmlspecialchars($behauptung);
    echo "<br />\n" ;
    echo htmlspecialchars($behauptung, ENT_QUOTES);
    echo "<br />\n" ;
    echo htmlspecialchars($behauptung, ENT_NOQUOTES);
    echo "<br />\n" ;
    $mit = htmlspecialchars($behauptung);
    $ohne = htmlspecialchars_decode($mit);
    echo $ohne;


    Das Ergebnis zeigt sich wenn ihr es ausprobiert habt ;)


    Nun kommen wir zu Teil 2.
    Die Funktion htmlentities() ist ähnlich wie htmlspecialchars(). Sie wandelt aber zusätzlich zu den bei htmlspechialchars() umgewandelten Zeichen auch Sonderzeichen wie ä, ö und ähnliche Zeichen in die entspechende (X)HTML-Entities um.


    Die Funktion strip_tags() geht einen Schritt weiter, Sie entfernt (X)HTML-Tags aus einem String. Als ersten Parameter gibt man den String an, den du von Tags bereinigen möchtest, als zweiten Param. kannst du (X)HTML-Elemente spezifizieren, die nicht entfernt werden sollen:
    Beispiel:


    PHP
    $string = "<p>Ein Absatz mit <em>mehrfacher</em> <strong>Betonung</strong></p>";
    echo $string;
    echo "\n";
    echo strip_tags($string);
    echo "\n";
    echo strip_tags($string, "<p><em>");


    Der behandelte String enthält verschiedene Tags: <p>,<strong> und <em>. Gibt man strip_tags() ohne zweiten Parameter an, werden einfach alle Tags rausgelöscht (Zeile 4). Beim zweiten Aufruf von strip_tags() wird hingegen festgelegt, dass <p> und <em> stehen bleiben sollen. In diesem Fall wird nur <strong> entfernt.


    Tipp:
    htmlspecialchars() und strip_tags() spielen eine entscheidende Rolle bei der Absicherung deines Scripts gegen (bösartige)Manipulationen.