CakeFest 2024: The Official CakePHP Conference

UConverter::transcode

(PHP 5 >= 5.5.0, PHP 7, PHP 8, PECL >= 3.0.0a1)

UConverter::transcodeПреобразовывает строку из одной кодировки символов в другую

Описание

public static UConverter::transcode(
    string $str,
    string $toEncoding,
    string $fromEncoding,
    ?array $options = null
): string|false

Преобразовывает строку str из кодировки fromEncoding в toEncoding.

Список параметров

str

Строка (string) для преобразования.

toEncoding

Требуемая кодировка результата.

fromEncoding

Текущая кодировка строки str.

options

Необязательный массив (array), который может содержать следующие ключи:

  • 'to_subst' - подстановочный символ, используемый вместо любого символа строки str, который не может быть закодирован в toEncoding. Если ключ указан, он должен представлять один символ в целевой кодировке.

Возвращаемые значения

Возвращает преобразованную строку или false, если возникла ошибка.

Примеры

Пример #1 Преобразование из UTF-8 в UTF-16 и обратно

<?php
$utf8_string
= "\x5A\x6F\xC3\xAB"; // 'Zoë' в UTF-8
$utf16_string = UConverter::transcode($utf8_string, 'UTF-16BE', 'UTF-8');
echo
bin2hex($utf16_string), "\n";

$new_utf8_string = UConverter::transcode($utf16_string, 'UTF-8', 'UTF-16BE');
echo
bin2hex($new_utf8_string), "\n";
?>

Результат выполнения приведённого примера:

005a006f00eb
5a6fc3ab

Пример #2 Недопустимые символы во входной строке

Если входная строка содержит последовательность байтов, которая не является допустимой в кодировке, указанной в fromEncoding, то перед преобразованием в toEncoding она заменяется кодовой точкой Unicode U+FFFD (Заменяющий символ).

<?php
$invalid_utf8_string
= "\xC3"; // неполная многобайтовая последовательность UTF-8
$utf16_string = UConverter::transcode($invalid_utf8_string, 'UTF-16BE', 'UTF-8');
echo
bin2hex($utf16_string), "\n";
?>

Результат выполнения приведённого примера:

fffd

Пример #3 Символы, которые не могут быть закодированы

Если входная строка содержит символы, которые не могут быть представлены в кодировке toEncoding, они заменяются одним символом. Используемый по умолчанию символ зависит от кодировки и может управляться с помощью параметра 'to_subst'.

<?php
$utf8_string
= "\xE2\x82\xAC"; // € (Знак евро) не существует в ISO 8859-1

// Замена по умолчанию в ISO 8859-1 - "\x1A" (Заменитель)
$iso8859_1_string = UConverter::transcode($utf8_string, 'ISO-8859-1', 'UTF-8');
echo
bin2hex($iso8859_1_string), "\n";

// Использование в качестве заменителя символа '?' ("\x3F").
$iso8859_1_string = UConverter::transcode(
$utf8_string, 'ISO-8859-1', 'UTF-8', ['to_subst' => '?']
);
echo
bin2hex($iso8859_1_string), "\n";

// Поскольку ISO 8859-1 не может отобразить U+FFFD, недействительная входная строка также заменяется на to_subst
$invalid_utf8_string = "\xC3"; // неполная многобайтовая последовательность UTF-8
$iso8859_1_string = UConverter::transcode(
$invalid_utf8_string, 'ISO-8859-1', 'UTF-8', ['to_subst' => '?']
);
echo
bin2hex($iso8859_1_string), "\n";
?>

Результат выполнения приведённого примера:

1a
3f
3f

Смотрите также

  • mb_convert_encoding() - Преобразовывает строку из одной кодировки символов в другую
  • iconv() - Преобразовывает строку из одной кодировки символов в другую

add a note

User Contributed Notes

There are no user contributed notes for this page.
To Top