7

我有这个 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

4 回答 4

11

这里的问题是字符串不是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 特定控制字符。这个简单的例子只是为了给你指出正确的方向......

玩得开心!

于 2015-06-28T08:42:01.727 回答
5

来自 intl 扩展的 Transliterator 类可以使用其预定义的 Hex-Any 标识符处理转换:

$in = '\u304a\u306f\u3088\u3046\u3054\u3056\u3044\u307e\u3059';
$out = transliterator_create('Hex-Any')->transliterate($in);
var_dump($out); # string(27) "おはようございます"
于 2015-06-28T09:03:48.450 回答
2
$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 字符串

在此处输入图像描述

于 2015-06-28T08:50:48.237 回答
2
于 2017-07-06T11:39:17.750 回答