Каковы различия между htmlspecialchars()
и htmlentities()
. Когда следует использовать один или другой?
Из документации PHP для htmlentities :
Эта функция идентична
htmlspecialchars()
всеми способами, за исключениемhtmlentities()
, все символы, имеющие эквиваленты сущности HTML, переводятся в эти сущности.
Из документации PHP для htmlspecialchars :
Некоторые символы имеют особое значение в HTML и должны быть представлены объектами HTML, если они должны сохранять их значения. Эта функция возвращает строку с некоторыми из сделанных преобразований; сделанные переводы являются наиболее полезными для повседневного веб-программирования. Если вам требуется перевести все символы HTML-символов, вместо этого используйте
htmlentities()
.
Разница в том, что кодируется. Выбор – это все (сущности) или все минус «специальные» символы, такие как амперсанды, двойные и одинарные кавычки, меньше и больше (специальные).
Я предпочитаю использовать htmlspecialchars
когда это возможно.
Можно использовать htmlspecialchars
:
Когда нет необходимости кодировать все символы, имеющие свои эквиваленты HTML.
Если вы знаете, что кодировка страницы соответствует текстовым специальным символам, почему вы используете htmlentities
? htmlspecialchars
очень проста, и 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>. // ^ ^
Второй – короче и не вызывает проблем, если установлена кодировка ISO-8859-1.
Когда данные будут обрабатываться не только через браузер (чтобы избежать декодирования HTML-объектов),
Если выход – XML (см. Ответ Artefacto ).
Потому как:
htmlentities
заменяет больше символов, чем htmlspecialchars
. Это необязательно, делает скрипт PHP менее эффективным и полученный HTML-код менее читабельным. htmlentities
необходимо, только если ваши страницы используют кодировки, такие как ASCII или LATIN-1 вместо UTF-8, и вы обрабатываете данные с кодировкой, отличной от страницы.
Это кодируется с помощью htmlentities
.
implode( array_values( get_html_translation_table( HTML_ENTITIES ) ), "\t" )
:
"& <>
¡¢ £ ¤ ¥ | § ¨ © ª «¬ ® ¯ ° ± ² ³ 'μ ¶ · ¸ ¹ º» ¼ ½ ¾ ¿À Á Â Ã Ä Å Ç È É Ê Ë Ì Í Ï Ï Ñ Ò Ò Ó Ô Õ Ö × Ø Ú Ú Û Ý Ý ß ß á â â ä å æ ç è è ò ò í í ð ð ð ò ò õ õ ÷ ø Œ ú ú ü ü Ÿ ÿ Œ Œ Œ ƒ ƒ ƒ ƒ ƒ ~ Α Β Γ Δ Ε Ζ Η Θ Ι Κ Λ Μ Ν Ξ Ο Π Ρ Σ Τ Υ Φ Χ Ψ Ω α β γ δ ε ζ η θ ι κ λ μ ν ξ ο π ρ ς σ τ υ φ χ ψ ω θ Υ π – – '', "" "† ‡ • … ‰ '" <> ~ / € ℑ ℘ ℜ ™ ℵ ← ↑ → ↓ ↔ ↵ ⇐ ⇒ ⇒ ⇓ ⇔ ∀ ∂ ∃ ∅ ∇ ∈ ∉ ∋ Π Σ – * √ α ∞ ∠ ∧ ∨ ∩ ∪ ∫ ∴ ≅ ≈ ≈ ≠ ≡ ≤ ≥ ≥ ≥ ⊃ ⊃ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥
Это кодируется с помощью htmlspecialchars
.
implode( array_values( get_html_translation_table( HTML_SPECIALCHARS ) ), "\t" )
:
"& <>
Вы должны использовать htmlspecialchars($strText, ENT_QUOTES)
когда вы просто хотите, чтобы ваша строка была безопасна для XML и HTML:
Например, гостиницы
Однако, если у вас также есть дополнительные символы, которые являются Unicode или необычными символами в вашем тексте, вы должны использовать htmlentities (), чтобы убедиться, что они правильно отображаются на вашей HTML-странице.
Заметки:
Я только что узнал о функции get_html_translation_table
. Вы передаете ему HTML_ENTITIES
или HTML_SPECIALCHARS
и он возвращает массив с символами, которые будут закодированы и как они будут закодированы.
htmlspecialchars ()
делает минимальный размер кодировки, чтобы убедиться, что ваша строка не анализируется как HTML. Это делает вашу строку более понятной для человека, чем если бы вы использовали htmlentities ()
для кодирования абсолютно всего, что имеет кодировку.
Вероятно, вы хотите использовать кодировку символов Unicode, например UTF-8 и htmlspecialchars. Потому что нет необходимости генерировать «HTML-сущности» для «всех [применимых символов» (то есть, что делает htmlentities в соответствии с документацией), если оно уже находится в вашем наборе символов.
htmlentities – преобразовать все применимые символы в объекты HTML.
htmlspecialchars – Преобразование специальных символов в объекты HTML.
Перевод выполнен с использованием символов перевода:
Вы можете проверить следующий код для получения дополнительной информации о том, что такое htmlentities и htmlspecialchars:
Один небольшой пример: мне нужно было иметь 2 имени клиента, индексированные в функции:
[1] => Altisoxxce Soluxxons S.à rl [5] => Joxxson & Joxxson
Я первоначально $term = get_term_by('name', htmlentities($name), 'client');
что привело к именам терминов, которые включали только элемент массива амперсанда (&), но не акцентированный элемент. Но когда я изменил настройку переменной на htmlspecialchars
они смогли запустить функцию. Надеюсь это поможет!