(PHP 5 >= 5.5.0, PHP 7, PHP 8, PECL >= 3.0.0a1)
UConverter::transcode — ある文字エンコーディングから別の文字エンコーディングに文字列を変換する
$str,$toEncoding,$fromEncoding,$options = null
   文字列 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
