Unicodeエスケープの変換をするには

PHP

\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エスケープは文字化けする。

このサイトは筆者(hydrocul)の個人メモの集合です。すべてのページは永遠に未完成です。