htmlspecialchars - Český PHP manuál
Klíčová funkce, která převede speciální znaky v textu na HTML entity. Mezi speciální znaky patří: '&', '"', "'", '<', '>'. Tato funkce je velmi důležitá a měla by být použita při výpisu většiny proměnných, aby nedošlo k narušení HTML dokumentu znaky od uživatele, případně aby nedošlo rovnou k XSS útoku.
Parametry
String pro převod. Jako druhý parametr můžeme uvést tzv. flagy. Jedná se o konstanty měnící chování funkce. Konstanty můžeme spojovat pomocí |. Jejich seznam je následující:
ENT_COMPAT | Převede uvozovky a apostrofy ponechá. |
ENT_QUOTES | Převede uvozovky i apostrofy. |
ENT_NOQUOTES | Ponechá uvozovky i apostrofy. |
ENT_IGNORE | Vymaže neplatné znaky na pozadí. Toto nastavení je nebezpečné, protože tak může dojít k XSS. |
ENT_SUBSTITUTE | Nahradí neplatné znaky na pozadí znakem s otazníkem. |
ENT_DISALLOWED | Nahradí znaky, které jsou normálně platné, ale nejsou platné pro daný doctype znakem s otazníkem. |
ENT_HTML401 | Zpracovává kód jako HTML 4.01. |
ENT_XML1 | Zpracovává kód jako XML 1. |
ENT_XHTML | Zpracovává kód jako XHTML. |
ENT_HTML5 | Zpracovává kód jako HTML 5. |
Výchozí nastavení bez uvedení parametrů je ENT_COMPAT | ENT_HTML401.
Další nepovinný parametr je kódování, nejčastěji 'UTF-8'. Pozor, před PHP 5.4 je výchozí ISO-8859-1, od 5.4 je to UTF-8.
Příklad
<?php $s = 'Vítej ve fóru, tvůj problém vyřeší tag </body>, nemáš totiž ukončené body.'; echo htmlspecialchars($s);
Výstup:
Vítej ve fóru, tvůj problém vyřeší tag </body>, nemáš totiž ukončené body.
Bez prohnání výstupu funkcí htmlspecialchars by samozřejmě došlo k vložení tagu </body> do stránky a tím k jejímu narušení.
Funkce nepřeloží všechny znaky, pro které existují entity, jen ty základní. Pokud potřebujete převést všechny (což většinou ne, protože dojde např. k rozbití diakritiky), použijte funkci htmlentities.