Php 将高位代码点(>;U+;FFFF)编码为HTML实体
我有一个输入字符串(URL编码): %F0%9F%98%8EPhp 将高位代码点(>;U+;FFFF)编码为HTML实体,php,utf-8,html-entities,emoji,Php,Utf 8,Html Entities,Emoji,我有一个输入字符串(URL编码): %F0%9F%98%8E 解码的是表情符号“,自己实现就可以了,很简单:如果我给这个函数传递一个url,它就会变成xyz,这是我能处理的任何想法this@AbdulMannan您可以执行str_替换(“+”,“%20”),运行mb_htmlentities,然后将“%20”转换回“+”。您可以尝试取消urldecode函数(因为这是导致加号转换为空格的原因),但这可能会导致mb_htmlentities出现问题。YMMV:)感谢@timgws删除了url de
解码的是表情符号“
,自己实现就可以了,很简单:如果我给这个函数传递一个url,它就会变成xyz,这是我能处理的任何想法this@AbdulMannan您可以执行str_替换(“+”,“%20”),运行mb_htmlentities
,然后将“%20”转换回“+”。您可以尝试取消urldecode
函数(因为这是导致加号转换为空格的原因),但这可能会导致mb_htmlentities出现问题。YMMV:)感谢@timgws删除了url decode,并修复了此问题。
<?php
function mb_ord($char, $encoding = 'UTF-8') {
if ($encoding === 'UCS-4BE') {
list(, $ord) = (strlen($char) === 4) ? @unpack('N', $char) : @unpack('n', $char);
return $ord;
} else {
return mb_ord(mb_convert_encoding($char, 'UCS-4BE', $encoding), 'UCS-4BE');
}
}
function mb_htmlentities($string, $hex = false, $encoding = 'UTF-8') {
return preg_replace_callback('/[\x{80}-\x{10FFFF}]/u', function ($match) use ($hex) {
return sprintf($hex ? '&#x%X;' : '&#%d;', mb_ord($match[0]));
}, $string);
}
echo mb_htmlentities(urldecode('%F0%9F%98%8E'));