使用PHP将 Convert转换为HTML格式的表情符号

时间:2017-11-08 18:33:07

标签: php utf-8 decode utf-16 htmldecode

我们有一堆代理对(或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 和一些公共图书馆。

我承认在转换字符编码时我不是专家!

2 个答案:

答案 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() 调用。
  • 没有一次性变量声明。