HTML in PHP codieren
-
Codieren mit
htmlspecialchars()
-
Codieren mit
htmlentities()
-
Codieren mit
htmlentities()
und HTML5-Codierung - Codieren Sie mit einer benutzerdefinierten Methode
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 auffalse
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 <b>bold text</b> a'nd á <script>alert();</script> 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 '
kodiert:
A <b>bold text</b> a'nd á <script>alert();</script> 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 auffalse
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 <b>bold text</b> ánd a <script>alert();</script> 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 <b>bold text</b> ánd a <script>alert();</script> tag'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:
àéò ©€ ♣♦
↠ ↔↛ āžš
ķūņ ↙ ℜ℞ ∀∂∋
rūķīš ○
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 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