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 add a note

User Contributed Notes

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