Разница между 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.
UTF-8 на всех уровнях!
Сортировка двумерного массива по значению в столбце
Что такое потокобезопасность и непотокобезопасность в PHP?
Как передать переменные и данные из PHP в JavaScript?
Вставка нового элемента в массив в любом месте в PHP