PHPでユニコードエスケープ(unicode_encode, unicode_decode代替)
PHP6からは unicode_encode() 関数と unicode_decode() 関数が追加されるらしいのですが、PHP5やPHP4でユニコードエスケープをしたい時のために。
// UTF-8文字列をUnicodeエスケープする。ただし英数字と記号はエスケープしない。 function unicode_decode($str) { return preg_replace_callback("/((?:[^\x09\x0A\x0D\x20-\x7E]{3})+)/", "decode_callback", $str); } function decode_callback($matches) { $char = mb_convert_encoding($matches[1], "UTF-16", "UTF-8"); $escaped = ""; for ($i = 0, $l = strlen($char); $i < $l; $i += 2) { $escaped .= "\u" . sprintf("%02x%02x", ord($char[$i]), ord($char[$i+1])); } return $escaped; } // Unicodeエスケープされた文字列をUTF-8文字列に戻す function unicode_encode($str) { return preg_replace_callback("/\\\\u([0-9a-zA-Z]{4})/", "encode_callback", $str); } function encode_callback($matches) { $char = mb_convert_encoding(pack("H*", $matches[1]), "UTF-8", "UTF-16"); return $char; } // 使用例 $str = "東京"; // ユニコードエスケープする $decoded = unicode_decode($str); echo "$decoded\n"; // 「\u6771\u4eac」が出力される // UTF-8に戻す $encoded = unicode_encode($decoded); echo "$encoded\n"; // 「東京」が出力される