サロゲート ペア形式の UTF-16 でエンコードされた文字がいくつかあります。これらのサロゲート ペアを文字として画面に出力したいと考えています。
これがどのように可能か知っている人はいますか?
サロゲート ペア形式の UTF-16 でエンコードされた文字がいくつかあります。これらのサロゲート ペアを文字として画面に出力したいと考えています。
これがどのように可能か知っている人はいますか?
iconv('UTF-16', 'UTF-8', yourString)
あなたの質問は少し不明確です。
UTF-16エスケープシーケンスが埋め込まれたASCIIテキストがある場合は、次の方法ですべてをUTF-8に変換できます。
function unescape_utf16($string) {
/* go for possible surrogate pairs first */
$string = preg_replace_callback(
'/\\\\u(D[89ab][0-9a-f]{2})\\\\u(D[c-f][0-9a-f]{2})/i',
function ($matches) {
$d = pack("H*", $matches[1].$matches[2]);
return mb_convert_encoding($d, "UTF-8", "UTF-16BE");
}, $string);
/* now the rest */
$string = preg_replace_callback('/\\\\u([0-9a-f]{4})/i',
function ($matches) {
$d = pack("H*", $matches[1]);
return mb_convert_encoding($d, "UTF-8", "UTF-16BE");
}, $string);
return $string;
}
$string = '\uD869\uDED6';
echo unescape_utf16($string);
これにより、UTF-8の文字が得られます(BMPの外部にあるため、4バイトが必要です)。
すべてのテキストがUTF-16(HTMLタグなどを含む)である場合、出力がUTF-16であるとブラウザに伝えることができます。
header("Content-type: text/html; charset=UTF-16");
PHPスクリプトはUTF-16で記述できないため(PHPがマルチバイトサポートでコンパイルされていない限り)、これは非常にまれです。これにより、リテラル文字列の印刷が厄介になります。
したがって、おそらくUTF-16には、Webページが使用しているエンコーディングに変換したいテキストが1つしかないでしょう。この変換は次の方法で実行できます。
//replace UTF-8 with your actual page encoding
mb_convert_encoding($string, "UTF-8", "UTF-16");