表情符号的存储,一般的utf8字段无法直接存储,可以先urlencode,取出来显示的时候先做urldecode
表情符号的显示,参考项目:https://github.com/iamcal/php-emoji
引用上述开源项目的类库后,执行下面的函数:
function parseHtmlemoji ($text)
{
$tmpStr = json_encode($text);
$tmpStr = preg_replace("#(\\\ue[0-9a-f]{3})#ie", "addslashes('\\1')",
$tmpStr);
$text = json_decode($tmpStr);
preg_match_all("#u([0-9a-f]{4})+#iUs", $text, $rs);
if (empty($rs[1])) {
return $text;
}
foreach ($rs[1] as $v) {
$test_iphone = '0x' . trim(strtoupper($v));
$test_iphone = $test_iphone + 0;
$t = emoji_unified_to_html(emoji_softbank_to_unified($this->utf8_bytes($test_iphone)));
$text = str_replace("\u$v", $t, $text);
}
return $text;
}
function utf8_bytes ($cp)
{
if ($cp > 0x10000) {
# 4 bytes
return chr(0xF0 | (($cp & 0x1C0000) >> 18)) .
chr(0x80 | (($cp & 0x3F000) >> 12)) .
chr(0x80 | (($cp & 0xFC0) >> 6)) . chr(0x80 | ($cp & 0x3F));
} else
if ($cp > 0x800) {
# 3 bytes
return chr(0xE0 | (($cp & 0xF000) >> 12)) .
chr(0x80 | (($cp & 0xFC0) >> 6)) . chr(0x80 | ($cp & 0x3F));
} else
if ($cp > 0x80) {
# 2 bytes
return chr(0xC0 | (($cp & 0x7C0) >> 6)) .
chr(0x80 | ($cp & 0x3F));
} else {
# 1 byte
return chr($cp);
}
}
有话要说