本文共 892 字,大约阅读时间需要 2 分钟。
移动端输入时允许输入表情,表情实际上是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
转载地址:http://wlwoa.baihongyu.com/