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