和平在你身上
我搜索了用图像替换文字情感
发现了硫化物,但它有一个问题
<?php
function emoticons($text) {
$icons = array(
':)' => '<img src="/images/blank.gif" alt="smile" class="emo1" />',
':-)' => '<img src="/images/blank.gif" alt="smile" class="emo2" />',
':/' => '<img src="/images/blank.gif" alt="smile" class="emo3" />',
);
return strtr($text, $icons);
}
echo "http://stackoverflow.com good site:) :-)";
?>
它输出:(我不希望它那样做)
"http<img src="/images/blank.gif" alt="smile" class="emo3" />/stackoverflow.com good site<img src="/images/blank.gif" alt="smile" class="emo1" /> <img src="/images/blank.gif" alt="smile" class="emo2" />"
我想输出
"http://stackoverflow.com good site:) <img src="/images/blank.gif" alt="smile" class="emo2" />"
我认为它应该在文本之前或之后有空格然后替换它
在另一个问题中,正确的答案是
foreach($icons as $icon=>$image) {
$icon = preg_quote($icon);
$text = preg_replace("~\b$icon\b~",$image,$text);
}
但我使用它但结果没有任何图像
请帮帮我, 感谢stackoverflow&amp;&amp;全部:))
更新:
我修改了这个功能并且工作正常,但是想听听你的意见 如果我在聊天消息中使用它会好吗?或将面临问题?
function emoticons($text) {
$icons = array(
':)' => '<img src="/images/blank.gif" class="emo1"/>',
':-)' => '<img src="/images/blank.gif" class="emo1"/>',
':/' => '<img src="/images/blank.gif" class="emo3"/>',
);
$text = " ".$text." ";
foreach ($icons as $search => $replace){
$text = str_replace(" ".$search." ", " ".$replace." ", $text);
}
return trim($text);
}
$str = ":)http://stackoverflow.com good site:) :-)";
echo emoticons($str);
答案 0 :(得分:3)
您只需将://
添加到列表中即可:
'://' => '://',
并用相同的字符串替换它。
由于strtr
首先替换最长的密钥,因此网址不会受到影响
好吧,如果您只想替换前面带空格的图标,可以尝试使用正则表达式:
foreach($icons as $icon => $image)
$text = preg_replace('#(?:^|\s)(' . preg_quote($icon) . ')(?:\s|$)#', $image, $text);
这将匹配任何以空格开头/或位于字符串开头的图标,后面跟一个空格/或位于字符串的末尾。
但是我不明白为什么你会这么想,像foo:)
这样的文字也应该被视为笑脸。仅供参考我几乎没有为表情符号添加空格:)
答案 1 :(得分:2)
这个怎么样,只有当它作为字符串的开头或跟随一个空格时才会被替换:
function emoticons($text) {
$icons = array(
':)' => '<img src="/images/blank.gif" alt="smile" class="emo1" />',
':-)' => '<img src="/images/blank.gif" alt="smile" class="emo2" />',
':/' => '<img src="/images/blank.gif" alt="smile" class="emo3" />',
);
foreach ($icons as $search => $replace)
$text = preg_replace("#(?<=\s|^)" . preg_quote($search) . "#", $replace, $text);
return $text;
}
$str = "http://stackoverflow.com good site:) :-)";
echo emoticons($str);
输出:
http://stackoverflow.com good site:) <img src="/images/blank.gif" alt="smile" class="emo2" />
答案 2 :(得分:1)
尝试像这样替换'with':
':)' => "<img src="/images/blank.gif" alt="smile" class="emo1" />",
如果不能正常工作,请尝试:
":)" => '<img src="/images/blank.gif" alt="smile" class="emo1" />',