为了账号安全,请及时绑定邮箱和手机立即绑定

PHP字符串中的Unicode字符

PHP字符串中的Unicode字符

PHP
拉丁的传说 2019-08-03 03:03:09
PHP字符串中的Unicode字符这个问题看起来很简单,但我一直找不到答案。PHP相当于以下C#代码行?string str = "\u1000";此示例创建一个具有单个Unicode字符的字符串,其“Unicode数字值”以十六进制(小数点为4096)为1000。也就是说,在PHP中,如何使用已知“Unicode数值”的单个Unicode字符创建字符串?
查看完整描述

3 回答

?
有只小跳蛙

TA贡献1824条经验 获得超8个赞

因为JSON直接支持\uxxxx语法我首先想到的是:

$unicodeChar = '\u1000';echo json_decode('"'.$unicodeChar.'"');

另一个选择是使用mb_convert_encoding()

echo mb_convert_encoding('က', 'UTF-8', 'HTML-ENTITIES');

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

echo mb_convert_encoding("\x10\x00", 'UTF-8', 'UTF-16BE');



查看完整回答
反对 回复 2019-08-04
?
慕无忌1623718

TA贡献1744条经验 获得超4个赞

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

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);}

或者用一个匿名函数表达式而不是create_function:

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);}

它的用法:

$str = unicodeString("\u1000");



查看完整回答
反对 回复 2019-08-04
  • 3 回答
  • 0 关注
  • 281 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信