我收到一个这样的字符串:
" hello world "
我使用pregmatch进行转换:
preg_match_all('/([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{2900}-\x{297F}][\x{FE00}-\x{FEFF}]?|[\x{2B00}-\x{2BF0}][\x{FE00}-\x{FEFF}]?|[\x{1F000}-\x{1F6FF}][\x{FE00}-\x{FEFF}]?/u', $string, $emojis);
我明白了:
"\ud83d\ude03 hello world \ud83d\ude43"
但我需要像这样的文本等价物:
":smiley: hello world :upside_down_face:"
这是我的英语含义资源: http://unicode.org/Public/emoji/6.0/emoji-test.txt
如何构建一个能够执行此转换的高效PHP函数。
这是我到目前为止所写的功能。短代码数组有大约1200个元素。
function emo($ string) {
//Find Emojis In String
$emojis_cnt = preg_match_all('/([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{2900}-\x{297F}][\x{FE00}-\x{FEFF}]?|[\x{2B00}-\x{2BF0}][\x{FE00}-\x{FEFF}]?|[\x{1F000}-\x{1F6FF}][\x{FE00}-\x{FEFF}]?/u', $string, $emojis);
// Load Emoji Text Short Codes Into Array
if ($emojis_cnt>0)
{
$arr_em=array();
$arr_em["1F9C0"]=":cheese:";
$arr_em["1F991"]=":squid:";
$arr_em["1F990"]=":shrimp:";
$arr_em["1F98F"]=":rhinoceros:";
$arr_em["1F98E"]=":lizard:";
$arr_em["1F98D"]=":gorilla:";
$arr_em["1F98C"]=":deer:";
$arr_em["1F98B"]=":butterfly:";
$arr_em["1F98A"]=":fox_face:";
$arr_em["1F989"]=":owl:";
$arr_em["1F988"]=":shark:";
$arr_em["1F987"]=":bat:";
$arr_em["1F986"]=":duck:";
$arr_em["1F985"]=":eagle:";
$arr_em["1F984"]=":unicorn:";
$arr_em["1F983"]=":turkey:";
$arr_em["1F982"]=":scorpion:";
$arr_em["1F981"]=":lion:";
$arr_em["1F980"]=":crab:";
$arr_em["1F95E"]=":pancakes:";
$arr_em["1F95D"]=":kiwi_fruit:";
$arr_em["1F95C"]=":peanuts:";
//This keeps going for 1200 array elements
//String replace Emojis with Text Short Codes
foreach ($emojis[0] as &$emoji)
{
$em_hex= dechex(mx_uniord($emoji));
$string = str_ireplace($emoji, " ".$arr_em[strtoupper($em_hex)]." ",$string);
}
}
return $string;
}
答案 0 :(得分:0)
对你来说可能是一个肮脏但简单的解决方案
$output = "\ud83d\ude03 hello world \ud83d\ude43";
$return = str_replace(['\ud83d\ude03', '\ud83d\ude43'], [':smiley:',':upside_down_face:'], $output);
var_dump($return);
结果:
string(39) ":smiley: hello world :upside_down_face:"