2016-11-30 96 views
5

我已經有點掙扎一點點......PHP文字表情符號

我擡頭一看這個約5計算器的問題,但他們都不似乎工作,我心目中的方式。基本上我只想用表情符號代替「單詞」。

問題是,我想要單詞轉換只有當單詞不是另一個單詞的一部分。

這是我到目前爲止的代碼:

$text = ":D i dont kn:ow about this :O i just want to :) and :D everyday:P"; 
$icons = array(
     ':)' => '<img class="postemot" src="/emoticons/smile_yell.png" />', 
     ':D' => '<img class="postemot" src="/emoticons/laugh_yell.png" />', 
     ':(' => '<img class="postemot" src="/emoticons/sad_yell.png" />', 
     '>:O' => '<img class="postemot" src="/emoticons/scared_yell.png" />', 
     ':p' => '<img class="postemot" src="/emoticons/tongue_yell.png" />', 
     ':P' => '<img class="postemot" src="/emoticons/tongue_yell.png" />', 
     ':O' => '<img class="postemot" src="/emoticons/surprised_yell.png" />', 
     ':o' => '<img class="postemot" src="/emoticons/surprised_yell.png" />' 
    ); 
    foreach($icons as $icon=>$image) { 
      $icon = preg_quote($icon); 
      $text = preg_replace("~\b$icon\b~",$image,$text); 
    } 
    echo $text; 

但它只是沒有工作。輸出不正確。其實唯一輸出的表情符號是最後一個表情符號「」「daily:P」,這是不正確的。

+1

你需要考慮的事情......什麼時候表情是另一個詞的一部分?什麼把表情與單詞分開? – 2016-11-30 21:04:09

+0

@Hallur - 這不是分開它們。這是什麼使他們可以接受輸出爲表情符號。例如,當圖釋是單獨的,沒有其他字母時,讓我們輸出它。我不知道你說的是什麼意思... –

+0

$ icon可以包含開合支架;這些需要在正則表達式中逃脫。 – JosefScript

回答

4

應用圍繞表情單詞邊界元字符是不正確的,因爲\b是不希望的位置相匹配:

everyday:P 
     ^asserts right before here 

所以,你必須使用lookarounds確保表情符號與另一個斷言工作不是由非包圍空格字符:

(?<!\S)$icon(?!\S) 
+0

只需注意,這也可以不用正則表達式完成:'$ text = str_replace(「$ icon」,「$ image」, 「$ text」);' –