V HTML a XHTML dokumentech lze z historických důvodů používat pro zápis některých znaků entity. Ve znakové sadě Unicode (tedy např. v kódování UTF-8) ale už tyto entity nejsou potřeba a vystačíme si se základními XML entitami vytvářenými funkcí htmlspecialchars. Používání funkce htmlentities je tedy s kódováním UTF-8 zbytečné.
Někdy se znakových entit dokonce musíme zbavit. Konkrétně formát Atom dovoluje vkládat XHTML kód (to ostatně můžou umožňovat i jiné XML dokumenty), ten ale nesmí obsahovat znakové entity, protože ty jsou definované v externím DTD, který není připojen. Když tedy chceme validní XHTML fragment vložit do formátu Atom, musíme se entit zbavit.
PHP obsahuje funkci html_entity_decode, ta ale změní všechny entity – základní entity potřebujeme zachovat. Funkce get_html_translation_table zase pracuje jen s jednobajtovým kódováním. K odstranění nadbytečných entit tedy potřebujeme nejprve podruhé ošetřit ty základní a pak odošetřit všechny:
<?php /** Odstranění znakových XHTML entit * @param string XHTML v kódování UTF-8 * @return string XHTML obsahující pouze základní XML entity * @copyright Jakub Vrána, https://php.vrana.cz/ */ function remove_xhtml_entities($xhtml) { return html_entity_decode(preg_replace('~&(lt|gt|amp);~', '&\\1;', $xhtml), ENT_NOQUOTES, "utf-8"); } ?>
Diskuse je zrušena z důvodu spamu.