PHP Conference Japan 2024

UConverter::transcode

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

UConverter::transcode將字串從一種字元編碼轉換為另一種

說明

public static UConverter::transcode(
    字串 $str,
    字串 $toEncoding,
    字串 $fromEncoding,
    ?陣列 $options = null
): 字串|false

strfromEncoding 轉換為 toEncoding

參數

str

要轉換的 字串

toEncoding

結果所需的編碼。

fromEncoding

用於解讀 str 的目前編碼。

options

一個可選的 陣列,可以包含以下鍵值:

  • 'to_subst' - 用於取代任何無法以 toEncoding 編碼的 str 字元的替代字元。如果指定,它必須代表目標編碼中的單個字元。

回傳值

傳回已轉換的字串,失敗時傳回 false

範例

範例 #1 從 UTF-8 轉換為 UTF-16 並轉回

<?php
$utf8_string
= "\x5A\x6F\xC3\xAB"; // UTF-8 編碼的 'Zoë'
$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(Replacement Character,替換字元)取代。

<?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