我使用这张 表情符号表 并尝试以下代码:
<?php print json_decode('"\u2600"'); // This convert to ☀ (black sun with rays) ?>
如果我尝试将此 \u1F600 (笑脸)转换为 json_decode
,我会看到这个符号 — ὠ0
。
怎么了?如何获得正确的表情符号?
原文由 Platon 发布,翻译遵循 CC BY-SA 4.0 许可协议
除了 Tino 的回答之外,我还想添加代码以将 0x1F63C
等十六进制代码转换为 PHP5 中的 unicode 符号,并将其拆分为代理项对:
function codeToSymbol($em) {
if($em > 0x10000) {
$first = (($em - 0x10000) >> 10) + 0xD800;
$second = (($em - 0x10000) % 0x400) + 0xDC00;
return json_decode('"' . sprintf("\\u%X\\u%X", $first, $second) . '"');
} else {
return json_decode('"' . sprintf("\\u%X", $em) . '"');
}
}
echo codeToSymbol(0x1F63C);
输出😼
原文由 shukshin.ivan 发布,翻译遵循 CC BY-SA 3.0 许可协议
2 回答3.1k 阅读✓ 已解决
1 回答1.4k 阅读✓ 已解决
1 回答1k 阅读✓ 已解决
1 回答1.3k 阅读✓ 已解决
1 回答1.1k 阅读✓ 已解决
2 回答1.2k 阅读
1 回答1.2k 阅读
PHP 5
JSON 的
\u
一次只能处理一个 UTF-16 代码单元,因此您需要改为编写代理项对。对于U+1F600
这是\uD83D\uDE00
,它有效:PHP 7
您现在不再需要使用
json_decode
并且可以只使用\u
和 unicode 文字: