Разница между htmlentities() и htmlspecialchars() в PHP
В чем разница между htmlspecialchars() и htmlentities()? Когда следует использовать одну функцию вместо другой?
4 ответ(ов)
Это кодируется с помощью 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.
Поскольку:
- Иногда вы пишете данные в формате XML, и в XML файле вы не можете использовать HTML-сущности.
- Функция htmlentitiesзаменяет больше символов, чемhtmlspecialchars. Это избыточно, усложняет PHP-скрипт и делает результирующий HTML-код менее читаемым.
Использовать htmlentities необходимо только в том случае, если ваши страницы используют кодировки такие как ASCII или LATIN-1, и вы обрабатываете данные с кодировкой, отличной от кодировки страницы.
Функция htmlspecialchars() выполняет минимальное количество кодирования, чтобы гарантировать, что ваша строка не будет интерпретироваться как HTML. В результате ваша строка остаётся более читаемой для человека, чем в случае использования htmlentities(), которая кодирует абсолютно все символы, нуждающиеся в кодировании.
htmlentities и htmlspecialchars — это функции PHP, которые используются для преобразования специальных символов в HTML-сущности, чтобы предотвратить XSS-атаки и корректно отображать данные в браузере.
- htmlentities: эта функция преобразует все применимые символы в HTML-сущности. Например, она заменяет символы- &,- ",- ',- <, и- >на их соответствующие сущности:- &на- &,- "на- ", и так далее. Это полезно, когда вам нужно отобразить текст, который может содержать HTML-код, а не исполнять его.
- htmlspecialchars: эта функция более ограниченная и преобразует только определенные символы, такие как- &,- ",- ',- <, и- >. Она часто используется, когда необходимо экранировать текст для безопасного отображения внутри HTML-атрибутов.
При использовании htmlspecialchars, если флаг ENT_NOQUOTES не установлен, двойные кавычки " преобразуются в ", а одиночные кавычки ' преобразуются в ' (или не преобразуются вовсе, если установлен флаг ENT_QUOTES). Если вам не нужны кавычки, вы можете использовать флаг ENT_NOQUOTES.
Вот как происходят преобразования:
- '&'(амперсанд) становится- &
- '"'(двойная кавычка) становится- "(если- ENT_NOQUOTESне установлен)
- "'(одинарная кавычка) становится- '(или- ', если установлен- ENT_QUOTES)
- '<'(меньше) становится- <
- '>'(больше) становится- >
Вы можете ознакомиться с дополнительной информацией о htmlentities и htmlspecialchars, просмотрев данный код по ссылке: gist.github.com.
Функции startsWith() и endsWith() в PHP
Как получить расширение файла в PHP?
Как читать большой файл построчно?
ReCaptcha 2.0 с использованием AJAX
Почему нельзя вызывать абстрактные функции из абстрактных классов в PHP?