php - 在 PHP 中替换表情符号的更好方法?

标签 php emoticons strtr

现在我正在为表情符号使用这个功能:

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://:/ 部分将被替换:

enter image description here

与代码相同(每行前有 4 个空格以创建代码框),但出于某种原因,一个简单的 ) 也被替换(眨眼):

enter image description here

有没有比像这样替换所有图标更好的解决方案?显然效果不好。我在谷歌上搜索了很多,但没有找到更好的方法。我还尝试在上面的关联数组中的每个表情符号之前放置一个空格,但是如果您只输入一个 :) 之前没有任何内容,那将不起作用。

最佳答案

您可以使用 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/

相关文章:

c# - RichTextBox 用表情/图片替换字符串

android - 如何将表情符号有意发送到whatsapp?

R - 表情符号 unicode 到字符

PHP:使用 strtr 转换字符时出现问题

PHP 不区分大小写等价于 strtr

php - 命名用户头像的最有效方式?

php - 用于 PHP 的 JAXB(PAXB?)

php - joomla:使用 joomla db 函数在 joomla 外部建立数据库连接

php - 如何仅通过正则表达式查找 .xml 链接和日期