Get html translation table: примеры (PHP)

Использование get_html_translation_table для работы с HTML-сущностями
Раздел: HTML
get_html_translation_table(int $table = HTML_SPECIALCHARS, int $flags = ENT_COMPAT | ENT_HTML401, string $encoding = "UTF-8"): array

Функция get_html_translation_table возвращает таблицу преобразований, используемую внутренними функциями htmlspecialchars и htmlentities. Применяется для получения и модификации правил трансляции HTML-сущностей перед обработкой строк.

Аргументы функции

Функция принимает два необязательных аргумента:

  1. $table (int, необязательный) — определяет тип таблицы. Принимает константы HTML_ENTITIES или HTML_SPECIALCHARS. По умолчанию HTML_SPECIALCHARS.
  2. $flags (int, необязательный) — битовая маска из одной или нескольких констант, определяющих правила обработки кавычек и типа документа. Доступные константы: ENT_COMPAT, ENT_QUOTES, ENT_NOQUOTES, ENT_SUBSTITUTE, ENT_DISALLOWED, ENT_HTML401, ENT_XML1, ENT_XHTML, ENT_HTML5. По умолчанию ENT_QUOTES | ENT_SUBSTITUTE | ENT_HTML401 в PHP 8.
  3. $encoding (string, необязательный) — строка, указывающая кодировку. Начиная с PHP 8, этот аргумент игнорируется и используется UTF-8.

Примеры использования

Базовый пример с HTML_SPECIALCHARS
<?php
$table = get_html_translation_table(HTML_SPECIALCHARS);
print_r($table);
?>
Array
(
    ["] => &quot;
    [&] => &amp;
    [<] => &lt;
    [>] => &gt;
)
Пример с ENT_NOQUOTES
<?php
$table = get_html_translation_table(HTML_SPECIALCHARS, ENT_NOQUOTES);
print_r($table);
?>
Array
(
    [&] => &amp;
    [<] => &lt;
    [>] => &gt;
)
Пример с HTML_ENTITIES
<?php
$table = get_html_translation_table(HTML_ENTITIES, ENT_QUOTES | ENT_HTML5);
echo count($table) . " элементов\n";
?>
1511 элементов

Альтернативные функции в PHP

Функция преобразует специальные символы в HTML-сущности. Используется для безопасного вывода данных в HTML-контекст. Предпочтительнее для экранирования вывода.

Функция преобразует все символы, имеющие HTML-сущности. Используется реже, только при необходимости замены всех символов. Работает медленнее из-за большей таблицы преобразований.

mb_convert_encoding с HTML-ENTITIES

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

Аналоги в других языках

Python: html.escape
import html
result = html.escape('<script>alert("test")</script>', quote=True)
print(result)
&lt;script&gt;alert(&quot;test&quot;)&lt;/script&gt;
JavaScript: DOMParser и текстовые узлы
function escapeHtml(str) {
    const div = document.createElement('div');
    div.textContent = str;
    return div.innerHTML;
}
console.log(escapeHtml('<div>"test"&</div>'));
&lt;div&gt;&quot;test&quot;&amp;&lt;/div&gt;
MySQL: нет прямой замены

Используется экранирование через функции вроде mysql_real_escape_string для запросов или обработка на уровне приложения.

Распространенные ошибки

Игнорирование флагов кавычек
<?php
// Использование ENT_COMPAT без учета одинарных кавычек
$table = get_html_translation_table(HTML_SPECIALCHARS, ENT_COMPAT);
$str = "'test'" . "\n" . '"test"';
$translated = strtr($str, $table);
echo $translated;
?>
'test'
&quot;test&quot;
Попытка изменить таблицу напрямую
<?php
$table = get_html_translation_table(HTML_SPECIALCHARS);
$table['a'] = '@'; // Бесполезно, символ 'a' не преобразуется
?>

Изменение таблицы не влияет на работу htmlspecialchars, так как таблица генерируется при каждом вызове.

Изменения в PHP 8

Удаление параметра encoding

В PHP 8 удален третий параметр $encoding. Теперь функция использует только кодировку UTF-8. Передача этого параметра вызывает предупреждение.

Изменения значений по умолчанию

Значение по умолчанию для $flags изменено с ENT_COMPAT на ENT_QUOTES | ENT_SUBSTITUTE | ENT_HTML401.

Расширенные примеры

Создание пользовательской функции экранирования
Пример php
<?php
function custom_escape(string $input, bool $escapeQuotes = true): string {
    $flags = $escapeQuotes ? ENT_QUOTES : ENT_NOQUOTES;
    $table = get_html_translation_table(HTML_SPECIALCHARS, $flags);
    // Добавляем замену для символа новой строки
    $table["\n"] = '<br>';
    return strtr($input, $table);
}
echo custom_escape("Пример\nстроки с 'кавычками'");
?>
Пример<br>строки с &#039;кавычками&#039;
Фильтрация нестандартных символов
Пример php
<?php
// Удаление символов, не входящих в таблицу преобразований
$table = get_html_translation_table(HTML_ENTITIES, ENT_QUOTES, 'UTF-8');
$input = "Hello © Δ test ✓";
$filtered = strtr($input, array_fill_keys(array_keys($table), ''));
echo $filtered;
?>
Hello © Δ test ✓
Расширение таблицы для пользовательских замен
Пример php
<?php
$table = get_html_translation_table(HTML_SPECIALCHARS);
// Добавление замены для символа евро
$table['€'] = '&euro;';
$result = strtr("Цена: 100€", $table);
echo $result;
?>
Цена: 100&euro;
Обратное преобразование таблицы
Пример php
<?php
// Получение таблицы и создание обратного преобразования
$table = get_html_translation_table(HTML_SPECIALCHARS, ENT_QUOTES);
$reverseTable = array_flip($table);
$encoded = "&lt;div&gt;Test&lt;/div&gt;";
$decoded = strtr($encoded, $reverseTable);
echo $decoded;
?>
<div>Test</div>

PHP get_html_translation_table function comments

En
Get html translation table Returns the translation table used by htmlspecialchars and htmlentities