我有点挣扎......
我查了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;
但它没有奏效。输出不正确。实际上唯一输出的表情符号是最后一个,&#34;每天:P&#34; ,这是不正确的。
答案 0 :(得分:4)
在表情符号周围应用单词边界元字符是不对的,因为\b
匹配了不需要的位置:
everyday:P
^ asserts right before here
所以你必须使用lookarounds来处理另一个断言,以确保表情符号不被非空格字符包围:
(?<!\S)$icon(?!\S)