UConverter::transcode
(PHP 5 >= 5.5.0, PHP 7, PHP 8, PECL >= 3.0.0a1)
UConverter::transcode — ある文字エンコーディングから別の文字エンコーディングに文字列を変換する
説明
public static UConverter::transcode(
string
string
string
?array
): string|false
string
$str
,string
$toEncoding
,string
$fromEncoding
,?array
$options
= null
): string|false
文字列 str
の文字エンコーディングを、
fromEncoding
から
toEncoding
に変換します。
パラメータ
str
-
変換する文字列。
toEncoding
-
変換したいエンコーディング。
fromEncoding
-
str
の解釈に使われる文字セット。 options
-
オプションの配列。以下のキーが使えます:
-
'to_subst'
-toEncoding
ではエンコードできないstr
の文字を置き換えるのに使う文字。 これを指定する場合、 変換先のエンコーディングのうちの一文字でなければいけません。
-
戻り値
変換後の文字列を返します。
失敗した場合に false
を返します
例
例1 UTF-8 から UTF-16 に変換し、UTF-8 に戻す例
<?php
$utf8_string = "\x5A\x6F\xC3\xAB"; // 'Zoë' in 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
では不正なバイト列が含まれていた場合、
Unicode のコードポイント
U+FFFD (置換文字) に置き換えられます。
この置き換えは、toEncoding
に変換する前に行われます。
<?php
$invalid_utf8_string = "\xC3"; // incomplete multi-byte UTF-8 sequence
$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"; // € (Euro Sign) does not exist in ISO 8859-1
// Default replacement in ISO 8859-1 is "\x1A" (Substitute)
$iso8859_1_string = UConverter::transcode($utf8_string, 'ISO-8859-1', 'UTF-8');
echo bin2hex($iso8859_1_string), "\n";
// Specify a replacement of '?' ("\x3F") instead
$iso8859_1_string = UConverter::transcode(
$utf8_string, 'ISO-8859-1', 'UTF-8', ['to_subst' => '?']
);
echo bin2hex($iso8859_1_string), "\n";
// Since ISO 8859-1 cannot map U+FFFD, invalid input is also replaced by to_subst
$invalid_utf8_string = "\xC3"; // incomplete multi-byte UTF-8 sequence
$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.
↑ and ↓ to navigate •
Enter to select •
Esc to close
Press Enter without
selection to search using Google