【发布时间】:2019-04-17 20:58:12
【问题描述】:
所以目前我有一个 UTF-16 十进制字符串,我正在使用 chr() 进行转换。
它在大多数情况下都可以正常工作,但在表情符号上却失败了。
我在 js 中运行了一个完美运行的示例,这是那个示例
console.log(String.fromCharCode(84,104,105,115,32,105,115,32,97,32,116,101,115,116,32,119,105,116,104,32,97,110,32,101,109,111,106,105,32,55357,56834,32))
产生
This is a test with an emoji ????
但是当我尝试在 PHP 中执行此操作时,这就是我得到的结果
function fromCharCode() {
return array_reduce(func_get_args(),function($a,$b){$a.=chr($b);return $a;});
}
print(fromCharCode(84,104,105,115,32,105,115,32,97,32,116,101,115,116,32,119,105,116,104,32,97,110,32,101,109,111,106,105,32,55357,56834,32));
结果:
This is a test with an emoji =
现在我发现 js 让我接受 String.fromCharCode(55357,56834) 生成 ????
但是 PHP 的 chr() 只能让你一次接收一个,这意味着我无法生成表情符号。
有没有人知道如何通过修复当前代码或使用不同的函数来做到这一点?
编辑:所以你有更多的背景,我最初必须开始的字符串是 HEX UTF-16
005400680069007300200069007300200061002000740065007300740020007700690074006800200061006E00200065006D006F006A00690020D83DDE020020
【问题讨论】:
-
那你为什么不使用 UTF-8 呢?这将使事情变得容易得多。例如。
echo mb_chr(128514); -
遗憾的是我没有使用 UTF-8 的选项,我必须使用的数据是 UTF-16
-
你能描述一下那是什么数据吗?因为这听起来几乎不可思议,此时需要 UTF16 数据。