6

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

11

В чем разница между htmlspecialchars() и htmlentities()? Когда следует использовать одну функцию вместо другой?

4 ответ(ов)

1

Это кодируется с помощью htmlentities.

Используя следующий код:

implode( "\t", array_values( get_html_translation_table( HTML_ENTITIES ) ) )

Вы получите таблицу символов, которая включает в себя:

" &   <   >
¡   ¢   £   ¤   ¥   ¦   §   ¨   ©   ª   «   ¬   ­   ®   ¯   °   ±   ²   ³   ´   µ   ¶   ·   ¸   ¹   º   »   ¼   ½   ¾   ¿   À   Á   Â   Ã   Ä   Å   Æ   Ç   È   É   Ê   Ë
Ì Í   Î   Ï   Ð   Ñ   Ò   Ó   Ô   Õ   Ö   ×   Ø   Ù   Ú   Û   Ü   Ý   Þ   ß   à   á   â   ã   ä   å   æ   ç   è   é   ê   ë   ì   í   î   ï   ð   ñ   ò   ó   ô   õ   ö   ÷   ø   ù   ú   û   ü   ý   þ   ÿ   Œ
œ Š   š   Ÿ   ƒ   ˆ   ˜   Α   Β   Γ   Δ   Ε   Ζ   Η   Θ   Ι   Κ   Λ   Μ   Ν   Ξ   Ο   Π   Ρ   Σ   Τ   Υ   Φ   Χ   Ψ   Ω   α   β   γ   δ   ε   ζ   η   θ   ι   κ   λ   μ   ν   ξ   ο   π   ρ   ς   σ   τ
υ φ   χ   ψ   ω   ϑ   ϒ   ϖ               ‌   ‍   ‎   ‏   –   —   ‘   ’   ‚   “   ”   „   †   ‡   •   …   ‰   ′   ″   ‹   ›   ‾   ⁄   €   ℑ   ℘   ℜ   ™   ℵ   ←   ↑   →   ↓   ↔   ↵   ⇐   ⇑   ⇒   ⇓   ⇔
∀ ∂   ∃   ∅   ∇   ∈   ∉   ∋   ∏   ∑   −   ∗   √   ∝   ∞   ∠   ∧   ∨   ∩   ∪   ∫   ∴   ∼   ≅   ≈   ≠   ≡   ≤   ≥   ⊂   ⊃   ⊄   ⊆   ⊇   ⊕   ⊗   ⊥   ⋅   ⌈   ⌉   ⌊   ⌋   ⟨
⟩ ◊   ♠   ♣   ♥   ♦

Это кодируется с помощью htmlspecialchars.

Используя следующий код:

implode( "\t", array_values( get_html_translation_table( HTML_SPECIALCHARS ) ) )

Вы получите:

" &   <   >

Таким образом, разница между htmlentities и htmlspecialchars заключается в том, что первый кодирует все существующие HTML-символы, тогда как второй кодирует только специальные символы HTML.

1

Поскольку:

  • Иногда вы пишете данные в формате XML, и в XML файле вы не можете использовать HTML-сущности.
  • Функция htmlentities заменяет больше символов, чем htmlspecialchars. Это избыточно, усложняет PHP-скрипт и делает результирующий HTML-код менее читаемым.

Использовать htmlentities необходимо только в том случае, если ваши страницы используют кодировки такие как ASCII или LATIN-1, и вы обрабатываете данные с кодировкой, отличной от кодировки страницы.

0

Функция htmlspecialchars() выполняет минимальное количество кодирования, чтобы гарантировать, что ваша строка не будет интерпретироваться как HTML. В результате ваша строка остаётся более читаемой для человека, чем в случае использования htmlentities(), которая кодирует абсолютно все символы, нуждающиеся в кодировании.

0

htmlentities и htmlspecialchars — это функции PHP, которые используются для преобразования специальных символов в HTML-сущности, чтобы предотвратить XSS-атаки и корректно отображать данные в браузере.

  • htmlentities: эта функция преобразует все применимые символы в HTML-сущности. Например, она заменяет символы &, ", ', <, и > на их соответствующие сущности: & на &amp;, " на &quot;, и так далее. Это полезно, когда вам нужно отобразить текст, который может содержать HTML-код, а не исполнять его.

  • htmlspecialchars: эта функция более ограниченная и преобразует только определенные символы, такие как &, ", ', <, и >. Она часто используется, когда необходимо экранировать текст для безопасного отображения внутри HTML-атрибутов.

При использовании htmlspecialchars, если флаг ENT_NOQUOTES не установлен, двойные кавычки " преобразуются в &quot;, а одиночные кавычки ' преобразуются в &#039; (или не преобразуются вовсе, если установлен флаг ENT_QUOTES). Если вам не нужны кавычки, вы можете использовать флаг ENT_NOQUOTES.

Вот как происходят преобразования:

  • '&' (амперсанд) становится &amp;
  • '"' (двойная кавычка) становится &quot; (если ENT_NOQUOTES не установлен)
  • "' (одинарная кавычка) становится &#039; (или ', если установлен ENT_QUOTES)
  • '&lt;' (меньше) становится &lt;
  • '&gt;' (больше) становится &gt;

Вы можете ознакомиться с дополнительной информацией о htmlentities и htmlspecialchars, просмотрев данный код по ссылке: gist.github.com.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь