2017-10-06 67 views
-3

我收到一個字符串是這樣的:轉換表情符號,英文含義PHP

" 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個元素。

功能EMO($字符串) {

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

}

+4

什麼你嘗試過迄今爲止的建設嗎? d你的功能,給我們看代碼。這不是自由軟件開發的平臺。 – Webdesigner

+0

感謝您回覆Webdesigner。我添加了我的功能。我很欣賞這個提示。 – AjaX

+0

這是一個好的開始,只是一個問題:到目前爲止工作的是什麼以及你需要哪些幫助 – Webdesigner

回答

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:" 
+0

感謝您的迴應 - 你已經得到了儘可能多的。在這組中有大約1200個表情符號,所以不確定這是最好的方法。我在上面添加了我的代碼。謝謝! – AjaX