htmlspecialchars - Český PHP manuál

PHP Manuál Textové řetězce 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 &lt;/body&gt;, 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.


 

  Aktivity (1)

Manuál pro vás napsal David Čápka
Avatar
Autor pracuje jako softwarový architekt a pedagog na projektu ITnetwork.cz (a jeho zahraničních verzích). Velmi si váží svobody podnikání v naší zemi a věří, že když se člověk neštítí práce, tak dokáže úplně cokoli.
Unicorn College Autor se informační technologie naučil na Unicorn College - prestižní soukromé vysoké škole IT a ekonomie.

Miniatura
Všechny články v sekci
Textové řetězce - Český PHP manuál

 

 

Komentáře

Avatar
rushh1120
Člen
Avatar
rushh1120:

čau, použil jsem $jméno = htmlspecialchar­s($_POST['jmé­no']); po vložení hodnoty jméno (vložil jsem </body>) výstup byl stejně </body> a jaký je rozdíl mezi htmlspecialchars() a mysql_real_es­cape_string() děkuji za odpověď

 
Odpovědět 14.10.2014 18:46
Avatar
Dominik Klapuch:

htmlspecialchars se používá pro výpis dat z databáze nebo jiného úložiště, ne pro jeho zápis. Zkus si z htmlspecialchars vypsat nějaké složitější html, třeba tučný text a uvidíš rozdíl. mysql_real_es­cape_string() jsem nevyužil a ty bys neměl taky, v PHP 5.5.0 je označen jako deprecated.

Editováno 14.10.2014 18:58
Odpovědět 14.10.2014 18:58
Kód a data patří k sobě.
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 2 zpráv z 2.