Unicodeエスケープの変換をするには
PHP 2015/11/25
\u5730\u7403\U0001F30D
のようなUnicodeエスケープされた文字列を復元するには以下のようなコードを書けばよい。
function unicode_unescape($str) {
$callback = function ($matches) {
if (empty($matches[2])) {
$code = hexdec($matches[3]);
return mb_convert_encoding(pack("N*", $code), "UTF-8", "UTF-32BE");
} else {
$code = hexdec($matches[2]);
return mb_convert_encoding(pack("n*", $code), "UTF-8", "UTF-16BE");
}
};
return preg_replace_callback("/(\\\\u([0-9a-zA-Z]{4})|\\\\U([0-9a-zA-Z]{8}))/", $callback, $str);
}
$str = "\\u5730\\u7403\\U0001F30D";
echo unicode_unescape($str); // => 地球🌍
ただ、これだと \uD83C\uDF0D
のようにサロゲートペアで表現されたUnicodeエスケープは文字化けする。