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