PHP转换emoji表情为HTML字符实体

本文介绍了一种将UTF-16编码的表情符号转换为HTML字符实体的方法,以解决数据库存储问题。该方法通过特定的PHP函数实现,适用于不希望更改数据库编码的情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

移动端输入时允许输入表情,表情实际上是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



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值