替换[code] [/ code]标签内的表情符号

时间:2012-12-23 14:42:37

标签: php regex bbcode

所以我开始a post before但它已经关闭了:(从那时起我已经设法进步了一点意识到我需要以某种方式获取[code][/code]标签内的内容并执行str_replace()在他们的笑脸bbcode文本中,这是我到目前为止,但它没有工作

if (preg_match_all('~[code](.*?)[\/code]~i', $row['message'], $match)){

 foreach($match[1] AS $key) {
   $find    = array(':)',':(',':P',':D',':O',';)','B)',':confused:',':mad:',':redface:',':rolleyes:',':unsure:');
   $replace = array(':)',':(',':P',':D',':O','&#59;)','B)',':confused:',':mad:',':redface:',':rolleyes:',':unsure:');
}
 $message = str_replace($find, $replace, $key);
  } else {
 $message = $row['message'];
}

它根本不会返回任何消息内容。

如果我更改此行:

$message = str_replace($find, $replace, $key);

到此:

$message = str_replace($find, $replace, $row['message']);

它有点工作但是替换了整个消息中的所有表情而不是[code][/code]标签中的内容,我假设它由$key表示?! ......任何帮助,请它让我的大脑超载!

我确实发现this question与我的不同但非常相关,但没有真正的答案。

1 个答案:

答案 0 :(得分:0)

我认为您可能更容易使用现有的BBCode解析器(例如NBBC)或至少检查它们是如何做到的。他们以更聪明的方式做到了。他们使用词法分析器,而不是使用正则表达式,它将它分成单独的标签(如下所示)。然后,他们只是不对[code]标签做任何事情。如果您仍想继续使用您的解决方案,那么我会将它们拆分为数组(bbcode = explode('[code]', bbcode),然后将其拆分为[code]。每隔一个列表元素不应该使用其他解析。如前所述:没有重新发明轮子的目的,所以不要这样做。

这是他们的解决方案的工作方式:

[b]Hello![/b]
[code]
#/usr/bin/python
import antigravity
[/code]
Python is much more awesome.

成为例如。包含以下元素的数组:

  1. [b]Hello![/b]
  2. [code]…[/code]
  3. Python is much more awesome.
  4. 然后它应用它应该应用的格式。更好,更人性化。

    由于篇幅不长,

    不是评论。