如何在PHP中将Unicode转义序列转换为文本?

时间:2015-06-28 08:33:08

标签: php unicode unicode-escapes

我有这个Unicode序列:\u304a\u306f\u3088\u3046\u3054\u3056\u3044\u307e\u3059。如何将其转换为文本?

$unicode = '\u304a\u306f\u3088\u3046\u3054\u3056\u3044\u307e\u3059';

我试过了:

echo $utf8-decode(unicode);

我试过了:

echo mb_convert_encoding($unicode , 'US-ASCII', 'UTF-8');

我试过了:

echo htmlentities($unicode , ENT_COMPAT, "UTF-8");

但这些函数都没有将序列转换为相应的日文文本。

4 个答案:

答案 0 :(得分:5)

这里的问题是字符串不是 unicode。它是一个转义序列,用于通过ASCII字符记下unicode(因此7位保存)。

使用phps json解码器有一个简单的技巧:

<?php
$sequence = '\u304a\u306f\u3088\u3046\u3054\u3056\u3044\u307e\u3059';
print_r(json_decode('["'.$sequence.'"]'));

输出结果为:

Array
(
    [0] => おはようございます
)

这意味着您可以定义一个简单的便利功能:

<?php
$sequence = '\u304a\u306f\u3088\u3046\u3054\u3056\u3044\u307e\u3059';

function decode($payload) {
  return array_pop(json_decode('["'.$payload.'"]'));
}

echo decode($sequence);

您希望在有效负载内添加错误处理和转义json特定控制字符。这个简单的例子只是为了指出你正确的方向......

玩得开心!

答案 1 :(得分:2)

PHP 7 +

从PHP 7开始,您可以使用Unicode codepoint escape syntax执行此操作。

echo "\u{304a}\u{306f}\u{3088}\u{3046}\u{3054}\u{3056}\u{3044}\u{307e}\u{3059}";输出おはようございます

答案 2 :(得分:1)

$unicode = '\u304a\u306f\u3088\u3046\u3054\u3056\u3044\u307e\u3059';
$json = sprintf('"%s"',$unicode); # build json string

$utf8_str = json_decode ( $json, true ); # json decode
echo $utf8_str; # おはようございます

请参阅Json string

enter image description here

答案 3 :(得分:0)

来自intl扩展的Transliterator类可以使用predefined Hex-Any identifier

来处理转换
$in = '\u304a\u306f\u3088\u3046\u3054\u3056\u3044\u307e\u3059';
$out = transliterator_create('Hex-Any')->transliterate($in);
var_dump($out); # string(27) "おはようございます"