我们有一堆代理对(或2字节的utf8?)字符,例如��
,这是将UTF8存储为2个字符的祈祷手表情符号。在浏览器中呈现时,此字符串呈现为两个?
示例:
我需要使用php将这些转换为emjoi手,但我根本无法找到iconv,utf8_decode,html_entity_decode等的组合将其拉下来。
此网站正确转换��
:
http://www.convertstring.com/EncodeDecode/HtmlDecode
在其中粘贴以下字符串
Please join me in this prayer. ��❤️
您会注意到surragate对 (��
)转换为
这个网站声称使用HTMLDecode,但我在php中找不到任何东西来解决这个问题。我试过了: 的iconv html_entity_decode 和一些公共图书馆。
我承认在转换字符编码时我不是专家!
答案 0 :(得分:2)
我无法找到执行此操作的功能,但这有效:
$str = "Please join me in this prayer. ��❤️";
$newStr = preg_replace_callback("/&#.....;&#.....;/", function($matches){return convertToEmoji($matches);}, $str);
print_r($newStr);
function convertToEmoji($matches){
$newStr = $matches[0];
$newStr = str_replace("&#", '', $newStr);
$newStr = str_replace(";", '##', $newStr);
$myEmoji = explode("##", $newStr);
$newStr = dechex($myEmoji[0]) . dechex($myEmoji[1]);
$newStr = hex2bin($newStr);
return iconv("UTF-16BE", "UTF-8", $newStr);
}
答案 1 :(得分:1)
我想花点时间清理 TylerF 的工作代码。
代码:(Demo)
$str = "Please join me in this prayer. ��❤️";
echo preg_replace_callback(
"/&#(\d{5});&#(\d{5});/",
function($m) {
return iconv("UTF-16BE", "UTF-8", hex2bin(dechex($m[1]) . dechex($m[2])));
},
$str
);
输出:
Please join me in this prayer. ?❤️
str_replace()
或 explode()
调用。