现在我使用这个功能表情:更好的方式来替换PHP中的表情符号?
function emoticons($text) {
$icons = array(
':)' => '<img src="/images/blank.gif" alt="smile" class="icon_smile" />',
':-)' => '<img src="/images/blank.gif" alt="smile" class="icon_smile" />',
':D' => '<img src="/images/blank.gif" alt="smile" class="icon_laugh" />',
':d' => '<img src="/images/blank.gif" alt="laugh" class="icon_laugh" />',
';)' => '<img src="/images/blank.gif" alt="wink" class="icon_wink" />',
':P' => '<img src="/images/blank.gif" alt="tounge" class="icon_tounge" />',
':-P' => '<img src="/images/blank.gif" alt="tounge" class="icon_tounge" />',
':-p' => '<img src="/images/blank.gif" alt="tounge" class="icon_tounge" />',
':p' => '<img src="/images/blank.gif" alt="tounge" class="icon_tounge" />',
':(' => '<img src="/images/blank.gif" alt="sad face" class="icon_sad" />',
':o' => '<img src="/images/blank.gif" alt="shock" class="icon_shock" />',
':O' => '<img src="/images/blank.gif" alt="shock" class="icon_shock" />',
':0' => '<img src="/images/blank.gif" alt="shock" class="icon_shack" />',
':|' => '<img src="/images/blank.gif" alt="straight face" class="icon_straight" />',
':-|' => '<img src="/images/blank.gif" alt="straight face" class="icon_straight" />',
':/' => '<img src="/images/blank.gif" alt="straight face" class="icon_straight" />',
':-/' => '<img src="/images/blank.gif" alt="straight face" class="icon_straight" />'
);
return strtr($text, $icons);
}
但如果你输入的http://
的:/
部分被替换的链接:
相同的代码(4位在前面每条线的创建代码框),但由于某种原因,一个简单的)
也被替换(用眨眼)以及:
有没有更好的解决方案,比替换这样的所有图标?这显然不太好。我在Google上搜索了很多,并没有找到更好的方法。我也尝试在上面的关联数组中的每个表情符号之前放置一个空格,但如果你只是在没有任何东西的情况下输入:),那么这不起作用。
+1对于单词边界 - 但在'http:// www'的情况下'http'不会是一个单词,'/'是一个单词边界,所以':/'仍然会被过滤? – Tim 2012-03-11 20:59:50
实际上,我把它回来了 - ['preg_quote'] +1(http://php.net/preg_quote),这太棒了! – Tim 2012-03-11 21:00:08
所以我把它放在我的函数中而不是使用'strtr()'? **编辑:**嗯,出于某种原因,现在没有图标正在变成图像。我想知道是否有办法让文本表情符号在代码框中变成图像? – Nathan 2012-03-11 21:08:38