首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在PHP中将Unicode转义序列转换为文本?

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

Stack Overflow用户
提问于 2015-06-28 16:33:08
回答 4查看 6.7K关注 0票数 7

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

代码语言:javascript
复制
$unicode = '\u304a\u306f\u3088\u3046\u3054\u3056\u3044\u307e\u3059';

我试过了:

代码语言:javascript
复制
echo $utf8-decode(unicode);

我试过了:

代码语言:javascript
复制
echo mb_convert_encoding($unicode , 'US-ASCII', 'UTF-8');

我试过了:

代码语言:javascript
复制
echo htmlentities($unicode , ENT_COMPAT, "UTF-8");

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

EN

回答 4

Stack Overflow用户

发布于 2015-06-28 16:42:02

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

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

代码语言:javascript
复制
<?php
$sequence = '\u304a\u306f\u3088\u3046\u3054\u3056\u3044\u307e\u3059';
print_r(json_decode('["'.$sequence.'"]'));

输出为:

代码语言:javascript
复制
Array
(
    [0] => おはようございます
)

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

代码语言:javascript
复制
<?php
$sequence = '\u304a\u306f\u3088\u3046\u3054\u3056\u3044\u307e\u3059';

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

echo decode($sequence);

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

玩得开心!

票数 11
EN

Stack Overflow用户

发布于 2015-06-28 17:03:48

intl扩展中的转译器类可以使用它的predefined Hex-Any identifier处理转换

代码语言:javascript
复制
$in = '\u304a\u306f\u3088\u3046\u3054\u3056\u3044\u307e\u3059';
$out = transliterator_create('Hex-Any')->transliterate($in);
var_dump($out); # string(27) "おはようございます"
票数 5
EN

Stack Overflow用户

发布于 2017-07-06 19:39:18

PHP 7+

从PHP7开始,您可以使用Unicode codepoint escape syntax来完成此操作。

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31097636

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档