NOVINKA: Získej 40 hodin praktických dovedností s AI – ZDARMA ke každému akreditovanému kurzu!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

PHP - htmlspecialchars

Třída

Kořen \ Bez třídy

Metoda - htmlspecialchars

(PHP 4, PHP 5, PHP 7)

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.

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().

Procedurální

  • function htmlspecialchars (string $string, int $flags = ENT_COMPAT | ENT_HTML401, string $encoding = ini_get("default_charset"), bool $double_encode = true) : string

Parametry

NázevDatový typVýchozí hodnotaPopis
$stringstring

Řetězec pro převod.

$flagsint ENT_COMPAT | ENT_HTML401

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.
$encodingstring ini_get("default_charset")

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.

$double_encodebool true

Pokud parametr obsahuje hodnotu FALSE, existující HTML entity již nebudou převedeny. V opačném případě se každá entita převede.

Návratové hodnoty

Vrací: string

Převedený řetězec.

Příklady

<?php
$s = 'Vítej ve fóru, tvůj problém vyřeší tag </body>, nemáš totiž ukončené body.';
echo htmlspecialchars($s);

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í.

Názorně si ještě ukažme, co se stane, pokud změníme hodnotu posledního parametru:

<?php
echo htmlspecialchars('Entita &lt; se používá pro menší než');
echo ('<br />');
echo htmlspecialchars('Entita &lt; se používá pro menší než', ENT_COMPAT | ENT_HTML401, 'UTF-8', false);

Jak můžeme vidět, v prvním případě byla entita opět zkonvertována, v druhém zůstala zachovaná.

Související manuály

      • function htmlspecialchars_decode (string $string, int $flags = ENT_COMPAT | ENT_HTML401) : string
      • function nl2br (string $string, bool $is_xhtml = true) : string
      • function strip_tags (string $str, string $allowable_tags) : string
      Aktivity