首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >PHP字符串中的Unicode字符

PHP字符串中的Unicode字符
EN

Stack Overflow用户
提问于 2011-05-19 20:09:34
回答 6查看 229.1K关注 0票数 184

这个问题看起来简单得令人尴尬,但我一直没能找到答案。

下面这行C#代码的PHP等价物是什么?

代码语言:javascript
复制
string str = "\u1000";

此示例创建一个包含单个Unicode字符的字符串,该字符的"Unicode numeric value“为十六进制的1000 (十进制的4096)。

也就是说,在PHP中,我如何创建包含一个Unicode字符的字符串,该字符的Unicode数值是已知的?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2011-05-19 20:20:39

因为JSON直接支持\uxxxx语法,所以我想到的第一件事是:

代码语言:javascript
复制
$unicodeChar = '\u1000';
echo json_decode('"'.$unicodeChar.'"');

另一种选择是使用mb_convert_encoding()

代码语言:javascript
复制
echo mb_convert_encoding('က', 'UTF-8', 'HTML-ENTITIES');

或者利用UTF-16BE (大端)和Unicode代码点之间的直接映射:

代码语言:javascript
复制
echo mb_convert_encoding("\x10\x00", 'UTF-8', 'UTF-16BE');
票数 183
EN

Stack Overflow用户

发布于 2015-12-22 05:46:35

PHP7.0.0引入了"Unicode codepoint escape" syntax

现在可以通过使用double-quotedheredoc字符串轻松地编写Unicode字符,而无需调用任何函数。

代码语言:javascript
复制
$unicodeChar = "\u{1000}";
票数 221
EN

Stack Overflow用户

发布于 2011-05-19 20:59:29

PHP不知道这些Unicode转义序列。但由于未知转义序列不受影响,您可以编写自己的函数来转换此类Unicode转义序列:

代码语言:javascript
复制
function unicodeString($str, $encoding=null) {
    if (is_null($encoding)) $encoding = ini_get('mbstring.internal_encoding');
    return preg_replace_callback('/\\\\u([0-9a-fA-F]{4})/u', create_function('$match', 'return mb_convert_encoding(pack("H*", $match[1]), '.var_export($encoding, true).', "UTF-16BE");'), $str);
}

或者使用anonymous function expression代替create_function

代码语言:javascript
复制
function unicodeString($str, $encoding=null) {
    if (is_null($encoding)) $encoding = ini_get('mbstring.internal_encoding');
    return preg_replace_callback('/\\\\u([0-9a-fA-F]{4})/u', function($match) use ($encoding) {
        return mb_convert_encoding(pack('H*', $match[1]), $encoding, 'UTF-16BE');
    }, $str);
}

它的用法:

代码语言:javascript
复制
$str = unicodeString("\u1000");
票数 22
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6058394

复制
相关文章

相似问题

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