W3docs

htmlspecialchars_decode()

Статья о функции PHP htmlspecialchars_decode(), которая используется для преобразования HTML-сущностей обратно в соответствующие символы.

Функция htmlspecialchars_decode() выполняет обратную операцию по сравнению с htmlspecialchars(): она преобразует пять специальных HTML-сущностей (&amp;, &lt;, &gt;, &quot;, &#039;) обратно в их буквальные символы (&, <, >, ", ').

Она обычно нужна, когда строка уже была закодирована для безопасного отображения в HTML и вам снова нужны исходные символы — например, для хранения оригинального текста, сравнения с незакодированными входными данными или передачи в систему, ожидающую буквальную разметку.

На этой странице рассматривается синтаксис, аргумент $flags и его влияние на кавычки, отличие от html_entity_decode(), а также важное замечание по безопасности, которое необходимо знать перед использованием.

Синтаксис

htmlspecialchars_decode(string $string, int $flags = ENT_QUOTES | ENT_SUBSTITUTE | ENT_HTML401): string
ПараметрОбязательныйОписание
$stringДаСтрока, содержащая HTML-сущности для декодирования.
$flagsНетБитовая маска, управляющая обработкой кавычек и типом документа.

Функция возвращает декодированную строку. Преобразуются только сущности, созданные функцией htmlspecialchars() — для полного набора именованных и числовых HTML-сущностей используйте html_entity_decode().

Примечание: значение $flags по умолчанию изменилось в PHP 8.1 с ENT_COMPAT | ENT_HTML401 на ENT_QUOTES | ENT_SUBSTITUTE | ENT_HTML401. Примеры ниже работают одинаково в обоих случаях.

Базовый пример

Пример использования htmlspecialchars_decode() в PHP

php— editable, runs on the server

В этом примере переменная $html_string содержит строку с HTML-кодом, включающим сущности. Функция htmlspecialchars_decode() преобразует HTML-сущности в соответствующие символы.

Результат выполнения этого кода:

<h1>Hello World</h1>

Символы < и > были восстановлены из &lt; и &gt;.

Управление кавычками с помощью $flags

Второй аргумент, $flags, определяет, какие сущности кавычек будут декодированы. Вот наиболее часто используемые значения:

ФлагВлияние на кавычки
ENT_QUOTESДекодирует как двойные (&quot;), так и одинарные (&#039;) кавычки.
ENT_COMPATДекодирует двойные кавычки; при декодировании также декодирует одинарные кавычки.
ENT_NOQUOTESОставляет &quot; и &#039; без изменений.
ENT_HTML5Обрабатывает входные данные как HTML5 (используйте в сочетании с флагом кавычек, например ENT_QUOTES | ENT_HTML5).

Распространённая точка путаницы: ENT_COMPAT часто ассоциируется с «только двойными кавычками», но это различие применимо только на стороне кодирования (htmlspecialchars()). При декодировании &#039; преобразуется как при ENT_QUOTES, так и при ENT_COMPAT. Чтобы одинарные кавычки остались в закодированном виде, необходимо передать ENT_NOQUOTES.

Как использовать htmlspecialchars_decode() в PHP?

php— editable, runs on the server

В этом примере переменная $html_string содержит строку с HTML-кодом и сущностями, включая закодированную одинарную кавычку. Функция htmlspecialchars_decode() вызывается с флагом ENT_QUOTES для преобразования HTML-сущностей в соответствующие символы, включая одинарную кавычку.

Результат выполнения этого кода:

<p>I'm a paragraph</p>

Флаг ENT_QUOTES восстановил одинарную кавычку в I'm вместе с угловыми скобками.

htmlspecialchars_decode() vs html_entity_decode()

Обе функции преобразуют сущности обратно в символы, но работают с разными наборами:

  • htmlspecialchars_decode() декодирует только пять сущностей, создаваемых функцией htmlspecialchars(): &amp;, &lt;, &gt;, &quot; и &#039;. Она быстра и предсказуема.
  • html_entity_decode() декодирует полную таблицу HTML-сущностей, включая именованные сущности, такие как &copy;, &nbsp; и &euro;, а также числовые ссылки.
<?php
$text = "&copy; 2024 &amp; &lt;Acme&gt;";

// Leaves &copy; untouched — it is not one of the five special chars
echo htmlspecialchars_decode($text);   // &copy; 2024 & <Acme>
echo "\n";

// Decodes &copy; too
echo html_entity_decode($text);        // © 2024 & <Acme>
?>

Используйте htmlspecialchars_decode(), когда нужно только обратить результат вызова htmlspecialchars(). Прибегайте к html_entity_decode(), когда текст может содержать именованные сущности, такие как &copy; или &nbsp;.

Замечание по безопасности

Декодирование превращает &lt;script&gt; обратно в живой тег <script>. Никогда не декодируйте строку и не выводите её на HTML-страницу без повторного экранирования, иначе вы снова открываете уязвимость межсайтового скриптинга (XSS). Декодируйте для хранения, сравнения или вывода не в HTML — и снова вызывайте htmlspecialchars() перед отправкой чего-либо в браузер.

Связанные функции

  • htmlspecialchars() — аналог для кодирования, обратный этой функции.
  • html_entity_decode() — декодирует все HTML-сущности, не только пять специальных.
  • htmlentities() — кодирует все применимые символы в сущности.
  • strip_tags() — полностью удаляет HTML-теги вместо их декодирования.

Практика

Практика
Каково назначение функции htmlspecialchars_decode() в PHP?
Каково назначение функции htmlspecialchars_decode() в PHP?
Was this page helpful?