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

strfromEncoding 转换为 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

参见

添加说明

用户贡献说明

此页面没有用户贡献说明。
To Top