php - 使用 UTF-16 十进制 php 打印表情符号
问题描述
所以目前我有一个 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)
哪个产生
但是 PHPchr()
只允许你一次输入一个,这意味着我无法生成表情符号。
有谁知道通过修复当前代码或使用不同的功能来做到这一点的方法?
编辑:所以你有更多的背景,我最初必须开始的字符串是 HEX UTF-16
005400680069007300200069007300200061002000740065007300740020007700690074006800200061006E00200065006D006F006A00690020D83DDE020020
解决方案
我设法让它以这种方式工作
echo utf16HexToUtf8("005400680069007300200069007300200061002000740065007300740020007700690074006800200061006E00200065006D006F006A00690020D83DDE020020");
function utf16HexToUtf8($data){
return preg_replace_callback('/(d[89ab][0-9a-f]{2})(d[c-f][0-9a-f]{2})|([0-9a-fA-F]{4})/i', function ($matches) {
return mb_convert_encoding( hex2bin($matches[0]), 'UTF-8', 'UTF-16');
}, $data);
}
输出:
This is a test with an emoji
它将它从一个大的长 HEX 字符串转换为二进制,然后将它从 UTF-16 转换为 UTF-8
根据原始示例/问题,这需要从当前的 UTF-16 整数数组转换为十六进制字符串
推荐阅读
- javascript - JS输入值数量不会改变值
- prestashop - Prestashop 订单状态消息
- r - R 4.0.x 是否向后兼容 R 3.6.x?
- mysql - 如何从此 JSON 中获取值?
- windows - 如何让批处理脚本找到特定文件并将其删除?
- eclipse - Eclipse、Java 11、OSGI 和 JAXB
- javascript - Discord.js 检查频道的每个角色权限
- python - Numpy将数组中的一系列整数转换为十六进制值
- python - 我得到一个空的数据框,试图通过网络抓取 html 代码。为什么?
- c# - 使用 LINQ C# 将公共数据分组到新字符串中