0

当用户想要发送消息时,他可以使用表情符号。发生的情况是,用户单击表情符号,以便插入相应的文本,如下所示:

:D

现在,在消息发送后,其他人想要看到它。我想要的是用图像替换 :D ......

这是我得到的:

  $patterns = array();
  $patterns[0] = '/:)/';
  $patterns[1] = '/:(/';
  $patterns[2] = '/:D/';
  $patterns[3] = '/:C/';
  $patterns[4] = '/:A/';
  $patterns[5] = '/:H/';
  $patterns[6] = '/:L/';
  $patterns[7] = '/:O/';
  $patterns[8] = '/:S/';
  $patterns[9] = '/;)/';
  $replacements = array();
  $replacements[0] = '<img alt=":)" border="0" src="./images/smileys/happy.png" width="25px" />';
  $replacements[1] = '<img alt=":(" border="0" src="./images/smileys/sad.png" width="25px" />';
  $replacements[2] = '<img alt=":D" border="0" src="./images/smileys/veryhappy.png" width="25px" />';
  $replacements[3] = '<img alt=":C" border="0" src="./images/smileys/cry.png" width="25px" />';
  $replacements[4] = '<img alt=":A" border="0" src="./images/smileys/angry.png" width="25px" />';
  $replacements[5] = '<img alt=":H" border="0" src="./images/smileys/heart.png" width="25px" />';
  $replacements[6] = '<img alt=":L" border="0" src="./images/smileys/love.png" width="25px" />';
  $replacements[7] = '<img alt=":O" border="0" src="./images/smileys/nothing.png" width="25px" />';
  $replacements[8] = '<img alt=":S" border="0" src="./images/smileys/scared.png" width="25px" />';
  $replacements[9] = '<img alt=";)" border="0" src="./images/smileys/wink.png" width="25px" />';
  preg_replace($patterns, $replacements, $bericht);

但这些不是正确的正则表达式......所以我得到一个 php 错误。在不久的将来,我想学习正则表达式如何工作的教程,但我希望现在有人可以帮助我。

有没有一种简单快捷的方法来做到这一点?最好像我现在这样按模式进行,而不是在 1 个大的正则表达式中。

4

3 回答 3

3

由于您不需要正则表达式搜索模式,您可以简单地使用str_replace.

从手册页:

如果你不需要花哨的替换规则(比如正则表达式),你应该总是使用这个函数而不是 preg_replace()。

$bericht = str_replace($patterns, $replacements, $bericht);
于 2013-08-23T09:34:36.430 回答
3

只需转义括号:

$patterns[0] = '/:\)/';
$patterns[1] = '/:\(/';
$patterns[9] = '/;\)/';

并且,将最后一行更改为:

$bericht = preg_replace($patterns, $replacements, $bericht);
于 2013-08-23T09:17:29.777 回答
0

您正在替换固定字符串,因此这里完全不需要使用正则表达式模式;一个简单的str_replace()就可以了。

或者更好的是,使用strtr(),因为这样您就可以使用关联数组来存储替换数据......

$replacements = array(
    ':)' = '<img alt=":)" border="0" src="./images/smileys/happy.png" width="25px" />',
    ':(' = '<img alt=":(" border="0" src="./images/smileys/sad.png" width="25px" />',
    ':D' = '<img alt=":D" border="0" src="./images/smileys/veryhappy.png" width="25px" />',
    ':C' = '<img alt=":C" border="0" src="./images/smileys/cry.png" width="25px" />',
    ':A' = '<img alt=":A" border="0" src="./images/smileys/angry.png" width="25px" />',
    ':H' = '<img alt=":H" border="0" src="./images/smileys/heart.png" width="25px" />',
    ':L' = '<img alt=":L" border="0" src="./images/smileys/love.png" width="25px" />',
    ':O' = '<img alt=":O" border="0" src="./images/smileys/nothing.png" width="25px" />',
    ':S' = '<img alt=":S" border="0" src="./images/smileys/scared.png" width="25px" />',
    ';)' = '<img alt=";)" border="0" src="./images/smileys/wink.png" width="25px" />',
);

$output = strtr($input, $replacements);

简单多了!

您应该注意的一件事是无意中替换了不打算用作表情符号的字符串。对于做这种事情的程序来说,这是一个很常见的问题。(当我不打算这样做时,我已经被 Skype 抓住了很多次将诸如(c)和之类的东西转换为图标)8)

于 2013-08-23T09:42:28.817 回答