我有点挣扎...

我查询了大约5个关于stackoverflow的问题,但这些问题似乎都没有按照我的想法进行。基本上,我只想用表情符号代替“单词”。

问题是我希望仅当该单词不属于另一个单词的一部分时才将其转换。

这是我到目前为止的代码:

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

但这只是没有用。输出不正确。实际上,唯一输出的表情是最后一个表情,即“everyday:P” ,这是不正确的。

最佳答案

在表情符号周围应用单词边界元字符是不正确的,因为\b匹配了不需要的位置:

everyday:P
        ^ asserts right before here

因此,您必须使用环视方法处理另一个断言,以确保表情符号不会被非空格字符包围:
(?<!\S)$icon(?!\S)

关于PHP文字转表情,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40898076/

10-13 04:29