微信中QQ表情的解析(php)

微信公衆平臺接受的消息中,標籤是用'/:'開頭的字符串表示的,假設要在網頁上顯示(比方製做微信大屏幕),就需要進行轉換。php

因此我向微信公衆平臺按順序發送了各個QQ表情,在微信公衆平臺後臺可以看到接受的表情會被解析成https://res.wx.qq.com/mpres/htmledition/images/icon/emotion/0.gif 這種圖片。因此本身寫一套解析函數就能夠。css

在微信公衆平臺後臺發現,騰訊本身幹了一件錯誤的事情:有一些表情沒有被正確解析,這些標籤的特色是有括號、引號這種字符,被轉移掉了,沒有轉換回來,因此需要使用到htmlspecialchars_decode()函數。詳細代碼例如如下:html

function qqface_convert_html($text){	
	return str_replace( $GLOBALS['qqface_maps'], array_map( "add_img_label",  array_keys($GLOBALS['qqface_maps'])  ), array_map( "array_htmlspecialchars_decode", $text )  );
}

function array_htmlspecialchars_decode($v){
	return htmlspecialchars_decode($v, ENT_QUOTES);
}

function add_img_label($v){
	return '<img src="https://res.wx.qq.com/mpres/htmledition/images/icon/emotion/'.$v.'.gif" width="24" height="24">';
}
array_map() 函數的第一個參數是回調函數,第二個參數需要是一個數組,遍歷數組的內容,調入第一個函數,而後返回用戶本身定義函數做用後的數組。好比(http://www.w3school.com.cn/php/func_array_map.asp):

<?php
function myfunction($v) 
{
if ($v==="Dog")
	{
	return "Fido";
	}
return $v;
}
$a=array("Horse","Dog","Cat");
print_r(array_map("myfunction",$a));
?>


$GLOBALS['qqface_maps']
的內容,還請到https://github.com/auver/qqface 下載閱讀


emoji表情的解析,有人已給出emoji表和配套css、sprite,直接調用就能夠,請參看https://github.com/iamcal/php-emoji
git

相關文章
相關標籤/搜索