现在,我将此功能用于表情符号:
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上进行了很多搜索,但没有找到更好的方法。我还尝试过在上面的关联数组中的每个表情符之前放置一个空格,但是如果您只输入:)却没有任何空格,那将不起作用。
最佳答案
您可以使用preg_replace函数,然后在正则表达式中使用单词边界。
foreach($icons as $icon=>$image) {
$icon = preg_quote($icon);
$text = preg_replace("~\b$icon\b~",$image,$text);
}
您需要使用单词边界,而不要使用空格,因为这会照顾到起点和终点。在之前需要一个空格意味着将不会找到一个:)。
关于php - 在PHP中替换表情符号的更好方法?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9658734/