Start · Sprachen · PHP · Referenz · htmlspecialchars

htmlspecialchars

Funktion

Escapt die fünf gefährlichen HTML-Zeichen zu Entities — dein Bollwerk gegen XSS bei direktem Echo.

seit PHP 4.0.0 Kategorie: string

Signatur

htmlspecialchars(string $string, int $flags = ENT_QUOTES | ENT_SUBSTITUTE | ENT_HTML401, ?string $encoding = null, bool $double_encode = true): string

Beschreibung

htmlspecialchars() ist die wichtigste Verteidigungsfunktion gegen Cross-Site-Scripting (XSS). Sie wandelt <, >, &, " und (mit ENT_QUOTES) ' in HTML-Entities um.

Ab PHP 8.1 sind die Standard-Flags ENT_QUOTES | ENT_SUBSTITUTE | ENT_HTML401 — was in fast allen Fällen sicher ist. Trotzdem lohnt es sich, explizit zu sein und immer htmlspecialchars($x, ENT_QUOTES, 'UTF-8') zu schreiben.

In Blade/Twig ist die Funktion bereits im Standard-Escape-Verhalten enthalten. In rohem PHP (Legacy-Code, Custom-Templates) darfst du keine einzige Zeile echo $userInput ohne Escape stehen lassen.

Parameter

Name Typ Default Beschreibung
$string Pflicht string Der zu escapende String.
$flags int ENT_QUOTES | ENT_SUBSTITUTE | ENT_HTML401 Bitmaske. Nutze ENT_QUOTES, um auch einfache Anführungszeichen zu escapen.
$encoding ?string null (= ini) Empfohlen: 'UTF-8'.
$double_encode bool true false: bestehende Entities werden nicht nochmal escaped.

Rückgabewert

Typ
string
Beschreibung
Der escapte String.

Beispiele

User-Input sicher ausgeben

<?php

$comment = '<script>alert(1)</script>';
echo htmlspecialchars($comment, ENT_QUOTES, 'UTF-8');
&lt;script&gt;alert(1)&lt;/script&gt;

Kleine Helper-Funktion

<?php

function e(string $s): string {
    return htmlspecialchars($s, ENT_QUOTES, 'UTF-8');
}

echo '&lt;h1&gt;' . e($title) . '&lt;/h1&gt;';

// Wichtig · Fallstricke

Nicht ausreichend für: (1) HTML-Attribute ohne Anführungszeichen — nutze immer class="...". (2) JavaScript-Kontext — nutze json_encode. (3) URL-Parameter — nutze rawurlencode.

Siehe auch