将Emojis转换为英语含义PHP

时间:2017-10-06 22:56:47

标签: php emoji

我收到一个这样的字符串:

" 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;

}

1 个答案:

答案 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:"