PHP轉換emoji表情為HTML字元實體

技術小牛人發表於2017-11-19

移動端輸入時允許輸入表情,表情實際上是UTF-16編碼,在資料庫儲存上會存在丟失,當前如果把資料庫字碼編碼修改為 utf8mb4 也是可以儲存。


如果不想修改其它則可以通過轉換把這些表情符轉換為HTML字元實體儲存。

程式碼如下:


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
function utf16_to_entities(){
    $content = mb_convert_encoding($content`utf-16`);
    $bin = bin2hex($content);
    $arr str_split($bin, 4);
    $l count($arr);
    $str ``;
    for ($n = 0; $n $l$n++) {
        if (isset($arr[$n + 1]) && (`0x` $arr[$n] >= 0xd800 && `0x` $arr[$n] <= 0xdbff && `0x` $arr[$n + 1] >= 0xdc00 && `0x` $arr[$n + 1] <= 0xdfff)) {
            $H `0x` $arr[$n];
            $L `0x` $arr[$n + 1];
            $code = ($H - 0xD800) * 0x400 + 0x10000 + $L - 0xDC00;
            $str.= `&#` $code `;`;
            $n++;
        else {
            $str.=mb_convert_encoding(hex2bin($arr[$n]),`utf-8`,`utf-16`);
        }
    }
    return $str;
}


注意:這裡字元儲存為 utf-8 如果程式碼所處理的格式為 GBK 自行修改。

本文轉自  ttlxihuan    51CTO部落格,原文連結:http://blog.51cto.com/php2012web/1863313



相關文章