Разница между htmlentities и htmlspecialchars в PHP

htmlentities преобразует символы HTML мнемоники

htmlspecialchars преобразует только символы:

  • ‘&’ (Амперсанд) становится ‘&’
  • ‘” ‘(Двойная кавычка) становится‘ " ’, когда ENT_NOQUOTES не установлен.
  • «‘ »(Одинарная кавычка) становится‘ '’(или & apos) только в том случае, если установлен ENT_QUOTES.
  • ‘<‘ (Меньше чем) становится ‘& lt;’
  • ‘>’ (Больше чем) становится ‘& gt;’

Обе функции используются для «вывода», чтобы обезопасить веб-страницу от атак с использованием межсайтовых сценариев. Считается, что htmlentities() лучше при экранировании данных, отправляемых клиенту/

Используйте флаг ENT_QUOTES и кодировку UTF-8, как ниже в примере

htmlentities($userdata, ENT_QUOTES, ‘UTF-8’);

Флаг ENT_QUOTES указывает ему преобразовывать как двойные, так и одинарные кавычки.

При этом

Ни одна из функций не подходит для XML-эскейпинга, потому что «слово» преобразовывает в &laquo;слово&raquo; при этом даже браузер начинает ругаться на RSS:

error on line 2 at column 902: Entity 'laquo' not defined

поэтому я пока что применяю такую функцию:

public function xmlEscape(string $string): string
{
    return str_replace(['&', '<', '>', '\'', '"'], ['&amp;', '&lt;', '&gt;', '&apos;', '&quot;'], $string);
}

Но, иногда я все же использую htmlspecialchars в XML, например:

<loc>' . htmlspecialchars($url, ENT_QUOTES | ENT_XML1) . '</loc>

или в админке для вывода данных в textarea.

В то же время htmlentities использую, например для максимально безопасного вывода данных на сайте:

<title>'.htmlentities($title).'</title>

10.09.2021 21:22

Комментарии

Комментариев пока нет.


Copyrights © 2007 - 2026 YaPro.Ru