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

如何在PHP中将Unicode转义序列转换为文本?,php,unicode,unicode-escapes,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'); ech

我有一个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");
我试着:

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

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

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

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

<?php
$sequence = '\u304a\u306f\u3088\u3046\u3054\u3056\u3044\u307e\u3059';
print_r(json_decode('["'.$sequence.'"]'));
这意味着您可以定义一个简单的便利功能:

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

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

echo decode($sequence);


来自intl extension的音译器类可以通过其以下功能处理转换:

PHP7+ 从PHP7开始,您可以使用


echo“\u{304a}\u{306f}\u{3088}\u{3046}\u{3054}\u{3056}\u{3044}\u{307e}\u{3059}”输出<代码>おはようございます

谢谢,你是救生员。我在Laravel中转换字体,但Laravel只给我unicode字体。你的方法对我帮助很大。但它需要安装php扩展。如果输入字符串有双字符,这不起作用quotes@Oleg事实上,答案中提到要在解决方案中添加错误处理和转义。。。
$in = '\u304a\u306f\u3088\u3046\u3054\u3056\u3044\u307e\u3059';
$out = transliterator_create('Hex-Any')->transliterate($in);
var_dump($out); # string(27) "おはようございます"