求PHP函数:将UTF-16 Unicode解码为Emoji表情
搞定PHP中Unicode实体转表情字符的问题
嘿,我太懂你试了一堆代码片段却没搞定的郁闷了!刚好我之前也遇到过类似的需求,给你分享一个靠谱的PHP函数,完美解决把%uD83D%uDE0B这种Unicode实体转成对应表情的问题:
function decodeUnicodeEntities($text) { // 匹配所有%u开头的四位十六进制Unicode实体 return preg_replace_callback('/%u([0-9A-Fa-f]{4})/', function($matches) { // 先把十六进制字符串转成UTF-16BE字节,再转换为UTF-8编码 return mb_convert_encoding(pack('H*', $matches[1]), 'UTF-8', 'UTF-16BE'); }, $text); }
怎么用?
很简单,直接传入你的文本就行:
$inputText = 'This is a smiley "%uD83D%uDE0B"'; $outputText = decodeUnicodeEntities($inputText); echo $outputText; // 会输出:This is a smiley "😋"
为啥这个能成?
那种%uXXXX格式其实是UTF-16的编码表示,像表情这类复杂字符需要两个UTF-16代理对(比如%uD83D%uDE0B)组合起来。这个函数会逐个匹配这些实体,把十六进制转成对应的UTF-16字节,再转成PHP常用的UTF-8编码,自然就能正确显示表情了。
而且这个函数不会影响文本里的其他内容,比如普通的URL编码字符(%20这类)完全不受影响,放心用就行!
内容的提问来源于stack exchange,提问作者Arsh Dhillon
相关产品推荐
相关产品推荐

