将表情符号转换为英文意思 PHP
Convert Emojis to English Meaning PHP
我收到这样的字符串:
" hello world "
我使用预匹配转换:
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个元素。
函数情绪($字符串)
{
//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;
}
也许这对你来说是一个肮脏但简单的解决方案
$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:"
我收到这样的字符串:
" hello world "
我使用预匹配转换:
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个元素。
函数情绪($字符串) {
//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;
}
也许这对你来说是一个肮脏但简单的解决方案
$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:"