我有点挣扎...
我查询了大约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/