(PHP 4, PHP 5, PHP 7, PHP 8)
utf8_encode — Преобразовывает строку из кодировки ISO-8859-1 в кодировку UTF-8
Функция УСТАРЕЛА с PHP 8.2.0. Пользоваться функцией настоятельно не рекомендуют.
Функция преобразовывает строку string
из кодировки
ISO-8859-1
в кодировку UTF-8
.
Замечание:
Функция не пытается угадать текущую кодировку предоставленной строки, а предполагает, что строку закодировали в кодировке ISO-8859-1 (которую также знают как Latin 1) и преобразовывает строку в кодировку UTF-8. Поскольку каждая последовательность байтов — корректная строка в кодировке ISO-8859-1, это никогда не приводит к ошибке, но не приведёт к получению полезной строки, если предполагалась другая кодировка.
Часто веб-страницы, которые отметили как страницы в кодировке
ISO-8859-1
, кодируются похожей кодировкой —Windows-1252
, и браузеры интерпретируют страницы в кодировкеISO-8859-1
как страницы в кодировкеWindows-1252
. Однако кодировкаWindows-1252
вместо управляющих кодов кодировкиISO-8859-1
содержит дополнительные печатные символы наподобие знака евро€
и английских двойных кавычек“
”
. Функция не конвертирует такие символы кодировкиWindows-1252
корректно. Для конвертации в кодировкуWindows-1252
пользуются альтернативными функциями.
string
Строка в кодировке ISO-8859-1.
Функция возвращает строку string
, которую преобразовала в кодировку в UTF-8.
Версия | Описание |
---|---|
8.2.0 | Функция устарела. |
7.2.0 | Функцию перенесли из модуля XML в ядро PHP. В предыдущих версиях функция была доступна только при установленном модуле XML. |
Пример #1 Простой пример преобразования строки из кодировки ISO-8859-1 в кодировку UTF-8
<?php
// Преобразование строки 'Zoë' из кодировки ISO 8859-1 в кодировку UTF-8
$iso8859_1_string = "\x5A\x6F\xEB";
$utf8_string = utf8_encode($iso8859_1_string);
echo bin2hex($utf8_string), "\n";
?>
Результат выполнения приведённого примера:
5a6fc3ab
Замечание: Устаревание и альтернативы
Начиная с PHP 8.2.0 функция устарела и её удалят в будущей версии. Разработчики языка рекомендуют заменить вызовы функции в коде альтернативами.
Аналогичную функциональность даёт функция mb_convert_encoding(), которая поддерживает кодировку ISO-8859-1 и набор других кодировок символов.
<?php
$iso8859_1_string = "\xEB"; // Символ "ë" — буква «e» с диерезисом в кодировке UTF-8
$utf8_string = mb_convert_encoding($iso8859_1_string, 'UTF-8', 'ISO-8859-1');
echo bin2hex($utf8_string), "\n";
$iso8859_7_string = "\xEB"; // Та же строка в кодировке ISO-8859-7 представляет символ «λ» — греческую строчную лямбду
$utf8_string = mb_convert_encoding($iso8859_7_string, 'UTF-8', 'ISO-8859-7');
echo bin2hex($utf8_string), "\n";
$windows_1252_string = "\x80"; // Символ "€" — знак евро в кодировке Windows-1252, не содержится в кодировке ISO-8859-1
$utf8_string = mb_convert_encoding($windows_1252_string, 'UTF-8', 'Windows-1252');
echo bin2hex($utf8_string), "\n";
?>Результат выполнения приведённого примера:
c3ab cebb e282acДругие способы, доступность которых зависит от загруженных модулей, — метод UConverter::transcode() и функция iconv().
Каждый следующий способ даёт один и тот же результат:
<?php
$iso8859_1_string = "\x5A\x6F\xEB"; // 'Zoë' в кодировке ISO-8859-1
$utf8_string = utf8_encode($iso8859_1_string);
echo bin2hex($utf8_string), "\n";
$utf8_string = mb_convert_encoding($iso8859_1_string, 'UTF-8', 'ISO-8859-1');
echo bin2hex($utf8_string), "\n";
$utf8_string = UConverter::transcode($iso8859_1_string, 'UTF8', 'ISO-8859-1');
echo bin2hex($utf8_string), "\n";
$utf8_string = iconv('ISO-8859-1', 'UTF-8', $iso8859_1_string);
echo bin2hex($utf8_string), "\n";
?>Результат выполнения приведённого примера:
5a6fc3ab 5a6fc3ab 5a6fc3ab 5a6fc3ab