Каковы различия между htmlspecialchars()
и htmlentities()
. Когда я должен использовать один или другой?
Из документации PHP для htmlentities :
Эта функция идентична
htmlspecialchars()
во всех отношениях, за исключением тогоhtmlentities()
, что все символы, имеющие эквиваленты сущностей символов HTML, транслируются в эти сущности.
Из документации PHP для htmlspecialchars :
Некоторые символы имеют особое значение в HTML и должны быть представлены объектами HTML, если они хотят сохранить свои значения. Эта функция возвращает строку с некоторыми из этих преобразований; сделанные переводы являются наиболее полезными для повседневного веб-программирования. Если вам требуется перевод всех сущностей символов HTML, используйте
htmlentities()
вместо этого.
Разница в том, что кодируется. Варианты выбора: все (сущности) или «специальные» символы, такие как амперсанд, двойные и одинарные кавычки, меньше или больше (спецчары).
Я предпочитаю использовать по htmlspecialchars
возможности.
Например:
echo htmlentities('<Il était une fois un être>.');
// Output: <Il était une fois un être>.
// ^^^^^^^^ ^^^^^^^
echo htmlspecialchars('<Il était une fois un être>.');
// Output: <Il était une fois un être>.
// ^ ^
htmlspecialchars()
когда это возможно, кроме очевидных различий? Какие ситуации будутhtmlentities()
вызывать у вас проблемы, аhtmlspecialchars()
не будут?htmlentities
иhtmlspecialchars
оба могут обрабатывать UTF-8, пока вы указываете"UTF-8"
третий аргумент.htmlspecialchars
может быть использовано:Когда нет необходимости кодировать все символы, которые имеют свои HTML-эквиваленты.
Если вы знаете, что кодировка страницы соответствует специальным символам текста, зачем вам использовать
htmlentities
?htmlspecialchars
это намного проще и производит меньше кода для отправки клиенту.Например:
Второй короче и не вызывает проблем, если установлена кодировка ISO-8859-1.
Когда данные будут обрабатываться не только через браузер (чтобы избежать декодирования сущностей HTML),
Если вывод XML (см. Ответ по Artefacto ).
источник
Это кодируется с
htmlentities
.implode( "\t", array_values( get_html_translation_table( HTML_ENTITIES ) ) )
:Это кодируется с
htmlspecialchars
.implode( "\t", array_values( get_html_translation_table( HTML_SPECIALCHARS ) ) )
:источник
Потому что:
htmlentities
заменяет больше символов, чемhtmlspecialchars
. Это не нужно, делает скрипт PHP менее эффективным, а полученный HTML-код - менее читабельным.htmlentities
необходимо, только если ваши страницы используют кодировки, такие как ASCII или LATIN-1 вместо UTF-8, и вы обрабатываете данные с кодировкой, отличной от кодировки страницы.источник
Вы должны использовать,
htmlspecialchars($strText, ENT_QUOTES)
когда вы просто хотите, чтобы ваша строка была безопасна для XML и HTML:Например, кодировать
Однако, если у вас также есть дополнительные символы, которые являются Unicode или необычными символами в вашем тексте, тогда вы должны использовать htmlentities (), чтобы убедиться, что они правильно отображаются на вашей HTML-странице.
Ноты:
источник
htmlspecialchars ()
выполняет минимальное количество кодирования, чтобы гарантировать, что ваша строка не анализируется как HTML. Это делает вашу строку более удобочитаемой, чем если бы вы использовалиhtmlentities ()
для кодирования абсолютно все, что имеет кодировку.источник
Я только что узнал о
get_html_translation_table
функции. Вы передаете егоHTML_ENTITIES
илиHTML_SPECIALCHARS
он возвращает массив с символами, которые будут закодированы и как они будут закодированы.источник
htmlentities - конвертирует все применимые символы в объекты HTML.
htmlspecialchars - конвертирует специальные символы в объекты HTML.
Переводы выполняются переводом символов на нижеуказанные:
Вы можете проверить следующий код для получения дополнительной информации о том, что такое htmlentities и htmlspecialchars:
https://gist.github.com/joko-wandiro/f5c935708d9c37d8940b
источник
Возможно, вы захотите использовать некоторую кодировку Unicode, например UTF-8 и htmlspecialchars. Потому что нет какой - либо необходимости генерировать «HTML сущности» для «всех [в] соответствующие символы» (то есть то , что делает htmlentities согласно документации) , если он уже в вашем наборе символов.
источник
Один небольшой пример, мне нужно было индексировать 2 имени клиента в функции:
Первоначально я
$term = get_term_by('name', htmlentities($name), 'client');
привел к именам терминов, которые включали только элемент массива амперсандов (&), но не акцентированный элемент. Но когда я изменил настройку переменной, чтобыhtmlspecialchars
оба смогли запустить функцию. Надеюсь это поможет!источник
Различия между htmlspecialchars () и htmlentities () очень малы. Давайте посмотрим несколько примеров:
htmlspecialchars (строка $ string) принимает несколько аргументов, где первый аргумент является строкой, а все остальные аргументы (определенные флаги, определенные кодировки и т. д.) являются необязательными. htmlspecialchars преобразует специальные символы в строке в объекты HTML. Например , если у вас есть <бр> в строке, htmlspecialchars преобразует его в & л; b & gt; , В то время как такие символы, как µ † и т. Д., Не имеют особого значения в HTML. Таким образом, они не будут преобразованы в сущности HTML с помощью функции htmlspecialchars, как показано в следующем примере.
htmlentities (string $ string) очень похож на htmlspecialchars и принимает несколько аргументов, где первый аргумент является строкой, а все остальные аргументы являются необязательными (определенные флаги, определенные кодировки и т. д.). В отличие от htmlspecialchars , htmlentities преобразует не только специальные символы в строке в сущности HTML, но и все применимые символы в сущности HTML.
источник
https://dev.w3.org/html5/html-author/charref
Не полностью, пожалуйста, проследите ссылку для полного документа.
источник