HTML in PHP codieren

Habdul Hazeez 30 März 2022
  1. Codieren mit htmlspecialchars()
  2. Codieren mit htmlentities()
  3. Codieren mit htmlentities() und HTML5-Codierung
  4. Codieren Sie mit einer benutzerdefinierten Methode
HTML in PHP codieren

Die HTML-Codierung ist ein Versuch, Cross-Site-Scripting-XSS in PHP-Webanwendungen bei der Verarbeitung von Benutzerdaten zu verhindern. In diesem Tutorial lernen Sie, wie Sie Daten mit htmlentities(), htmlspecialchars() und einer benutzerdefinierten Methode codieren.

Codieren mit htmlspecialchars()

PHP htmlspecialchars() ist eine eingebaute Funktion, die Sonderzeichen in HTML-Entitäten umwandeln kann. Die Syntax ist wie folgt:

htmlspecialchars( $string, $flags, $encoding, $double_encode )

Erklärung der Parameter:

  • $string: Der Eingabestring
  • $flags: Die Flags, die bestimmen, wie die Funktion mit Anführungszeichen im String umgehen soll
  • $encoding: Gibt die von der Funktion verwendete Kodierung an. Dieser Parameter ist optional
  • $double_encode: Ein boolesches Attribut, das vorgibt, ob PHP vorhandene Entitäten kodiert. Wenn Sie es auf false setzen, codiert PHP keine vorhandenen Entitäten

Wie alle Funktionen gibt htmlspecialchars() einen Wert zurück. Sein Wert ist die konvertierte Zeichenfolge. Wenn die Funktion die Zeichenfolge jedoch als ungültig betrachtet, gibt sie eine leere Zeichenfolge zurück.

Das nächste Beispiel zeigt, wie man einen String mit htmlspecialchars() umwandelt. Sie werden feststellen, dass die Funktion nicht mit Flags verwendet wird.

<?php
    $stringToEncode = "A <b>bold text</b> a'nd á <script>alert();</script> tag";

    $encodedString = htmlspecialchars($stringToEncode);

    echo $encodedString;
?>

Ausgabe:

A <b>bold text</b> a'nd á <script>alert();</script> tag

Wenn Sie die Quelle der Webseite anzeigen, werden Sie feststellen, dass der Apostroph und die Zeichen á nicht codiert sind:

A &lt;b&gt;bold text&lt;/b&gt; a'nd á &lt;script&gt;alert();&lt;/script&gt; tag

Wenn Sie nun ein Flag und ein Kodierungsformat an htmlspecialchars() übergeben, wird das Apostroph kodiert, aber das á nicht.

<?php
    $stringToEncode = "A <b>bold text</b> a'nd á <script>alert();</script> tag";

    $encodedString = htmlspecialchars($stringToEncode, ENT_QUOTES, 'UTF-8');
    
    echo $encodedString;
?>

Ausgabe:

A <b>bold text</b> a'nd á <script>alert();</script> tag

Quellcode der Seite anzeigen zeigt, dass der Browser das Apostroph als &#039; kodiert:

A &lt;b&gt;bold text&lt;/b&gt; a&#039;nd á &lt;script&gt;alert();&lt;/script&gt; tag

Codieren mit htmlentities()

Das htmlentites() ist ebenfalls eine eingebaute PHP-Funktion. Mit htmlentities() werden alle zutreffenden Zeichen in HTML-Entities umgewandelt. Seine Syntax ist wie folgt:

htmlentities( $string, $flags, $encoding, $double_encode )

Im Folgenden finden Sie eine Erläuterung der Parameter:

  • $string: Der Eingabestring
  • $flags: Die Flags, die bestimmen, wie die Funktion mit Anführungszeichen im String umgehen soll
  • $encoding: Gibt die von der Funktion verwendete Kodierung an. Dieser Parameter ist optional
  • $double_encode: Ein boolesches Attribut, das vorgibt, ob PHP vorhandene Entitäten kodiert. Wenn Sie es auf false setzen, codiert PHP keine vorhandenen Entitäten

Der Rückgabewert für diese Funktion ist die codierte Zeichenfolge.

Das Folgende ist ein Beispiel für die Konvertierung eines Strings mit htmlentities(). Hier wird htmlentities() mit keinem Flag verwendet.

<?php    
    $stringToEncode = "A <b>bold text</b> ánd a <script>alert();</script> tag's";

    $ecodedString = htmlentities($stringToEncode);

    echo $ecodedString;
?>

Ausgabe:

A <b>bold text</b> ánd a <script>alert();</script> tag's

Die Ansichtsquelle der Seite zeigt, dass die Funktion das Zeichen á ohne Flag codiert, aber das Apostroph nicht codiert wird.

A &lt;b&gt;bold text&lt;/b&gt; &aacute;nd a &lt;script&gt;alert();&lt;/script&gt; tag's

Eine Änderung des Codes ermöglicht es der Funktion, den Apostroph zu codieren.

<?php
    $stringToEncode = "A <b>bold text</b> ánd a <script>alert();</script> tag's";

    $ecodedString = htmlentities($stringToEncode, ENT_QUOTES, 'UTF-8');

    echo $ecodedString;
?>

Ausgabe:

A <b>bold text</b> ánd a <script>alert();</script> tag's

Quelle der Seite anzeigen:

A &lt;b&gt;bold text&lt;/b&gt; &aacute;nd a &lt;script&gt;alert();&lt;/script&gt; tag&#039;s

Codieren mit htmlentities() und HTML5-Codierung

Wenn Ihr String nicht-englische Zeichen enthält, können Sie das Flag HTML 5 und die Kodierung UTF-8 verwenden.

Das HTML5-Flag weist die Funktion an, die Zeichenfolge als HTML5 zu behandeln, und das UTF-8-Flag ermöglicht es der Funktion, jedes Standard-Unicode-Zeichen zu verstehen.

Im Folgenden finden Sie ein Beispiel für die Verwendung von htmlentities() mit einem HTML5-Flag und einer UTF-8-Codierung:

<?php
    $stringToEncode = "àéò ©€ ♣♦ ↠ ↔↛ āžšķūņ ↙ ℜ℞ ∀∂∋ rūķīš ○";

    $ecodedString = htmlentities($stringToEncode, ENT_HTML5, 'UTF-8');
    
    echo $ecodedString;
?>

Quelle der Seite anzeigen:

&agrave;&eacute;&ograve; &copy;&euro; &clubs;&diamondsuit;
&twoheadrightarrow; &harr;&nrarr; &amacr;&zcaron;&scaron;
&kcedil;&umacr;&ncedil; &swarr; &Rfr;&rx; &forall;&part;&ReverseElement;
r&umacr;&kcedil;&imacr;&scaron; &cir;

Codieren Sie mit einer benutzerdefinierten Methode

Wenn Sie Ihr Codierungsschema rollen möchten, kann sich eine benutzerdefinierte Methode als nützlich erweisen. Diese Methode nimmt Ihre Eingabezeichenfolge und wendet einige Zeichenkettenmanipulationen an. Am Ende erhalten Sie eine verschlüsselte Zeichenfolge.

Der folgende HTML-Code hat einen Textbereich und eine einzelne Senden-Schaltfläche. Das Formular action zeigt auf eine Datei, die die an die Formulareingabe übergebene Zeichenfolge codiert.

<main>
    <h1>Enter and HTML code and click the submit button</h1>
    <form action='encodedoutput.php' method='post'>
        <div class="form-row">
            <textarea rows='15' cols='50' name='texttoencode' required></textarea>
        </div>
        <div class="form-row">
            <input type='submit'>
        </div>
    </form>
</main>

Der nächste Codeblock ist der PHP-Code, der die Codierung durchführt. Speichern Sie es als encodedoutput.php.

<?php
    if (isset($_POST['texttoencode']) && !empty($_POST)) {
        // Check for empty text
        if ($_POST['texttoencode'] == "") {
            echo "Invalid text";
            die();
        }

        $inputHTML = bin2hex($_POST['texttoencode']); 
        $spiltHTML = chunk_split($inputHTML, 2 ,"%");
        $HTMLStringLength = strlen($spiltHTML);
        $HTMLSubLength = $HTMLStringLength - 1;
        $HTMLSubString = substr($spiltHTML,'0', $HTMLSubLength);

        $encodedOutput="<script>document.write(unescape('%$HTMLSubString'));</script>";

    } else {
        echo "Not allowed";
        die();
    }
?>

<textarea rows='15' cols='60'>
    <?php
        if ($encodedOutput) {
            echo $encodedOutput;
        } else {
            echo "";
            die();
        }
    ?>
</textarea>

Beispielausgabe für <script>alert("Hello world");</alert>:

<script>document.write(unescape('%3c%73%63%72%69%70%74%3e%61%6c%65%72%74%28%22%48%65%6c%6c%6f%20%77%6f%72%6c%64%22%29%3b%3c%2f%61%6c%65%72%74%3e'));</script>
Habdul Hazeez avatar Habdul Hazeez avatar

Habdul Hazeez is a technical writer with amazing research skills. He can connect the dots, and make sense of data that are scattered across different media.

LinkedIn

Verwandter Artikel - PHP Encode