2

我想在我的网站上显示来自我的 phpbb3 论坛的最新帖子,但没有 bbcode。所以我试图剥离 bbcode 但没有成功,例如其中一个帖子可能是:

[quote="SimonLeBon":3pwalcod]bladie bla bla[/quote:3pwalcod]bla bla bladie bla blaffsd
fsdjhgfd dgfgdffgdfg

剥离 bbcodes 我使用我通过谷歌找到的功能,我也尝试了其他几个类似的功能:

 <?php
function stripBBCode($text_to_search) {
     $pattern = '|[[\/\!]*?[^\[\]]*?]|si';
     $replace = '';
     return preg_replace($pattern, $replace, $text_to_search);
}
?>

然而,这实际上并没有任何影响。

4

4 回答 4

5

这将剥离有效的 bbcode(即,与结束标签匹配的开始标签)。

$str = preg_replace('/\[(\w+)=.*?:(.*?)\](.*?)\[\/\1:\2\]/', '$3', $str);

键盘

可重用函数

function stripBBCode($str) {
   return preg_replace('/\[(\w+)=.*?:(.*?)\](.*?)\[\/\1:\2\]/', '$3', $str);
}

解释

  1. \[匹配文字[
  2. (\w+)匹配 1 个或多个单词字符并保存在捕获组1中。
  3. =匹配文字=
  4. .*?不贪婪地匹配除\nbetween=和之外的每个字符:
  5. :匹配文字:
  6. (.*?)贪婪地匹配除\nbetween:和之外的每个字符]并保存在捕获组2中。
  7. \]匹配文字]
  8. (.*?)贪婪地匹配除\nbetween:和之外的每个字符]并保存在捕获组3中。
  9. \[匹配文字[
  10. /\1\2再次匹配之前的捕获组。
  11. \]匹配文字]
于 2011-05-19T12:13:51.430 回答
0

为什么不使用 PHP 内置的 BBCode 解析工具?

http://php.net/manual/en/book.bbcode.php

于 2012-12-20T20:28:29.813 回答
0

这是来自 phpBB 的一个(稍微调整为独立的):

/**
* Strips all bbcode from a text and returns the plain content
*/
function strip_bbcode(&$text, $uid = '')
{
    if (!$uid)
    {
        $uid = '[0-9a-z]{5,}';
    }

    $text = preg_replace("#\[\/?[a-z0-9\*\+\-]+(?:=(?:&quot;.*&quot;|[^\]]*))?(?::[a-z])?(\:$uid)\]#", ' ', $text);

    $match = return array(
        '#<!\-\- e \-\-><a href="mailto:(.*?)">.*?</a><!\-\- e \-\->#',
        '#<!\-\- l \-\-><a (?:class="[\w-]+" )?href="(.*?)(?:(&amp;|\?)sid=[0-9a-f]{32})?">.*?</a><!\-\- l \-\->#',
        '#<!\-\- ([mw]) \-\-><a (?:class="[\w-]+" )?href="(.*?)">.*?</a><!\-\- \1 \-\->#',
        '#<!\-\- s(.*?) \-\-><img src="\{SMILIES_PATH\}\/.*? \/><!\-\- s\1 \-\->#',
        '#<!\-\- .*? \-\->#s',
        '#<.*?>#s',
    );
    $replace = array('\1', '\1', '\2', '\1', '', '');

    $text = preg_replace($match, $replace, $text);
}
于 2011-05-20T19:20:29.577 回答
0

现在使用phpbb自带的函数https://wiki.phpbb.com/Strip_bbcode

于 2017-03-24T19:37:12.730 回答