(PHP 4, PHP 5, PHP 7, PHP 8)
utf8_decode — Преобразует строку из UTF-8 в ISO-8859-1, заменяя недопустимые или непредставимые символы
Функция объявлена УСТАРЕВШЕЙ, начиная с PHP 8.2.0. Использовать эту функцию крайне не рекомендуется.
$string
): string
Функция преобразует строку string
из кодировки
UTF-8
в ISO-8859-1
.
Байты в строке, которые не являются корректными символами UTF-8
и символами UTF-8
, которые не существуют в ISO-8859-1
(то есть кодовые точки выше U+00FF
), будут заменены на ?
.
Замечание:
Многие веб-страницы, отмеченные как использующие кодировку
ISO-8859-1
, на самом деле используют схожую кодировкуWindows-1252
, и веб-браузеры интерпретируют страницыISO-8859-1
какWindows-1252
. ОднакоWindows-1252
содержит дополнительные печатные символы, такие как знак Евро (€
) и фигурные кавычки (“
”
) вместо управляющих кодовISO-8859-1
. Эта функция не конвертирует такие символыWindows-1252
корректно. Используйте другую функцию, если нужна конвертация вWindows-1252
.
string
Строка, закодированная в UTF-8.
Возвращает данные string
, переведённые в ISO-8859-1.
Версия | Описание |
---|---|
8.2.0 | Функция объявлена устаревшей. |
7.2.0 | Функция была перенесена из модуля XML в ядро PHP. В предыдущих версиях она была доступна только при установленном модуле XML. |
Пример #1 Простой пример
<?php
// Преобразование строки 'Zoë' из UTF-8 в ISO 8859-1
$utf8_string = "\x5A\x6F\xC3\xAB";
$iso8859_1_string = utf8_decode($utf8_string);
echo bin2hex($iso8859_1_string), "\n";
// Неправильные последовательности UTF-8 заменяются на '?'
$invalid_utf8_string = "\xC3";
$iso8859_1_string = utf8_decode($invalid_utf8_string);
var_dump($iso8859_1_string);
// Символы, не существующие в ISO 8859-1, такие как
// '€' (Знак евро) также заменяются на '?'
$utf8_string = "\xE2\x82\xAC";
$iso8859_1_string = utf8_decode($utf8_string);
var_dump($iso8859_1_string);
?>
Результат выполнения данного примера:
5a6feb string(1) "?" string(1) "?"
Замечание: Устаревание и альтернативы
Функция устарела, начиная с PHP 8.2.0 и будет удалена в будущей версии. Существующие варианты использования должны быть проверены и заменены подходящими альтернативами.
Аналогичной функциональности можно достичь с помощью функции mb_convert_encoding(), которая поддерживает ISO-8859-1 и многие другие кодировки символов.
<?php
$utf8_string = "\xC3\xAB"; // 'ë' (e с диерезисом) в UTF-8
$iso8859_1_string = mb_convert_encoding($utf8_string, 'ISO-8859-1', 'UTF-8');
echo bin2hex($iso8859_1_string), "\n";
$utf8_string = "\xCE\xBB"; // 'λ' (Греческая строчная лямбда) в UTF-8
$iso8859_7_string = mb_convert_encoding($utf8_string, 'ISO-8859-7', 'UTF-8');
echo bin2hex($iso8859_7_string), "\n";
$utf8_string = "\xE2\x82\xAC"; // '€' (Символ евро) в UTF-8 (отсутствует в ISO-8859-1)
$windows_1252_string = mb_convert_encoding($utf8_string, 'Windows-1252', 'UTF-8');
echo bin2hex($windows_1252_string), "\n";
?>Результат выполнения данного примера:
eb eb 80Другие опции, которые могут быть доступны в зависимости от установленных модулей: UConverter::transcode() и iconv().
Все следующие варианты дают один и тот же результат:
Указание<?php
$utf8_string = "\x5A\x6F\xC3\xAB"; // 'Zoë' в UTF-8
$iso8859_1_string = utf8_decode($utf8_string);
echo bin2hex($iso8859_1_string), "\n";
$iso8859_1_string = mb_convert_encoding($utf8_string, 'ISO-8859-1', 'UTF-8');
echo bin2hex($iso8859_1_string), "\n";
$iso8859_1_string = iconv('UTF-8', 'ISO-8859-1', $utf8_string);
echo bin2hex($iso8859_1_string), "\n";
$iso8859_1_string = UConverter::transcode($utf8_string, 'ISO-8859-1', 'UTF8');
echo bin2hex($iso8859_1_string), "\n";
?>Результат выполнения данного примера:
5a6feb 5a6feb 5a6feb 5a6feb'?'
в качестве опции'to_subst'
в методе UConverter::transcode() даёт тот же результат, что и функция utf8_decode() для строк, которые являются недопустимыми или не могут быть представлены в ISO 8859-1.<?php
$utf8_string = "\xE2\x82\xAC"; // € (Символ евро) отсутствует в ISO-8859-1
$iso8859_1_string = UConverter::transcode(
$utf8_string, 'ISO-8859-1', 'UTF-8', ['to_subst' => '?']
);
var_dump($iso8859_1_string);
?>Результат выполнения данного примера:
sring(1) "?"