PHP preg_replace字符串到图像

时间:2013-08-23 09:15:01

标签: php regex preg-replace

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

: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);

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

有一种简单快捷的方法吗?最喜欢每个模式,就像我现在做的那样,而不是一个大的正则表达式。

3 个答案:

答案 0 :(得分:3)

转义括号:

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

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

$bericht = preg_replace($patterns, $replacements, $bericht);

答案 1 :(得分:3)

由于您不需要正则表达式搜索模式,因此您只需使用str_replace

从手册页:

  

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

$bericht = str_replace($patterns, $replacements, $bericht);

答案 2 :(得分: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);

更简单!

你应该注意的一件事是无意中更换了不是表情符号的字符串。对于执行此类操作的程序而言,这是一个非常常见的问题。 (当我不打算将(c)8)这样的内容转换成图标时,我很快被Skype抓住了。