所以我开始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',';)','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与我的不同但非常相关,但没有真正的答案。
答案 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.
成为例如。包含以下元素的数组:
[b]Hello![/b]
[code]…[/code]
Python is much more awesome.
然后它应用它应该应用的格式。更好,更人性化。
由于篇幅不长,不是评论。