emoji表情处理,emoji表情的编码解码

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了emoji表情处理,emoji表情的编码解码相关的知识,希望对你有一定的参考价值。

参考技术A emoji表情的编码解码

该方法实体编码后内容在页面是可以直接显示的,不需要解码,只有在js中才需要解码,同名的php函数具有相同编码功能

下面这句是js编码方法,直接带入字符串就可以直接复制到项目中使用了

function emoji_encode(e)var n=/[\ud800-\udbff][\udc00-\udfff]/g;return e=e.replace(n,function(e)var n,r;return 2===e.length?(n=e.charCodeAt(0),r=e.charCodeAt(1),"&#"+(1024*(n-55296)+65536+r-56320)+";"):e)

下面是经过上面编码后,在js环境下乳 uni-app的h5页面中调用,需要调用下面的解码才能正常显示。

function emoji_decode(e)var n=/\&#.*?;/g;return e.replace(n,function(e)var n,r,t;return 9==e.length?(t=parseInt(e.match(/[0-9]+/g)),n=Math.floor((t-65536)/1024)+55296,r=(t-65536)%1024+56320,unescape("%u"+n.toString(16)+"%u"+r.toString(16))):e)

php环境下的编码通过下面方法调用代入str参数就可以了实现编码了 

function emoji_encode($str)

    preg_match_all('/./u',$str,$matches);

    $unicodeStr = "";

    foreach($matches[0] as $m)

        $unicodeStr .=(strlen($m) >= 4 )?"&#".base_convert(bin2hex(iconv('UTF-8',"UCS-4",$m)),16,10).';':$m;

   

    return $unicodeStr;

MYSQL 写入emoji表情字符处理

这个鬼emoji表情是4个字节,mysql使用的utf8编码,UTF8占3个字节,要存储那个emoji表情需要将mysql编码由UFT8改为UFT8的超集,utf8mb4;

改数据库编码容易引起大面的乱码灾难。所以当遇到emoji字符表情的时候做特殊处理。网上也有很多处理方案,最后找到了一个贴上地址和代码:https://github.com/BriquzStudio/php-emoji ,多谢

class Emoji
{
	/**
	 * Encode emoji in text
	 * @param string $text text to encode
	 */
	public static function Encode($text) {
		return self::convertEmoji($text,"ENCODE");
	}
	/**
	 * Decode emoji in text
	 * @param string $text text to decode
	 */
	public static function Decode($text) {
		return self::convertEmoji($text,"DECODE");
	}
	private static function convertEmoji($text,$op) {
		if($op=="ENCODE"){
			return preg_replace_callback(‘/([0-9|#][\x{20E3}])|[\x{00ae}|\x{00a9}|\x{203C}|\x{2047}|\x{2048}|\x{2049}|\x{3030}|\x{303D}|\x{2139}|\x{2122}|\x{3297}|\x{3299}][\x{FE00}-\x{FEFF}]?|[\x{2190}-\x{21FF}][\x{FE00}-\x{FEFF}]?|[\x{2300}-\x{23FF}][\x{FE00}-\x{FEFF}]?|[\x{2460}-\x{24FF}][\x{FE00}-\x{FEFF}]?|[\x{25A0}-\x{25FF}][\x{FE00}-\x{FEFF}]?|[\x{2600}-\x{27BF}][\x{FE00}-\x{FEFF}]?|[\x{2600}-\x{27BF}][\x{1F000}-\x{1FEFF}]?|[\x{2900}-\x{297F}][\x{FE00}-\x{FEFF}]?|[\x{2B00}-\x{2BF0}][\x{FE00}-\x{FEFF}]?|[\x{1F000}-\x{1F9FF}][\x{FE00}-\x{FEFF}]?|[\x{1F000}-\x{1F9FF}][\x{1F000}-\x{1FEFF}]?/u‘,array(‘self‘,"encodeEmoji"),$text);
		}else{
			return preg_replace_callback(‘/(\\\u[0-9a-f]{4})+/‘,array(‘self‘,"decodeEmoji"),$text);
		}
	}
	private static function encodeEmoji($match) {
		return str_replace(array(‘[‘,‘]‘,‘"‘),‘‘,json_encode($match));
	}
	
	private static function decodeEmoji($text) {
		if(!$text) return ‘‘;
		$text = $text[0];
		$decode = json_decode($text,true);
		if($decode) return $decode;
		$text = ‘["‘ . $text . ‘"]‘;
		$decode = json_decode($text);
		if(count($decode) == 1){
		   return $decode[0];
		}
		return $text;
	}
}

 

$nickName = Emoji::Decode($userinfo[‘nickname‘]);

$realName = empty($nickName) ? ‘微信用户:‘ . time() : $nickName;

以上是关于emoji表情处理,emoji表情的编码解码的主要内容,如果未能解决你的问题,请参考以下文章

iOS  Emoji表情编码/解码

MYSQL 写入emoji表情字符处理

java处理emoji表情

Android应用中使用emoji表情的思路,我想用关键字替换成表情,但是手机输入的表情编码不知道

PHP处理字符中的emoji表情

怎么将unicode编码转换成emoji表情