Удалить bbcode phpbb

Я хочу отображать самые последние сообщения с моего форума phpbb3 на своем веб-сайте, но без bbcode. поэтому я пытаюсь удалить bbcode, но безуспешно, например, один из постов может быть:

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

чтобы удалить bbcodes, я использую функцию, которую я нашел через Google, я также пробовал несколько других подобных функций:

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

Однако на самом деле это не имеет никакого эффекта.


person user746379    schedule 19.05.2011    source источник


Ответы (4)


Вот один из 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);
}
person igorw    schedule 20.05.2011

Это удалит действительный bbcode (т. е. открывающие теги, соответствующие закрывающим тегам).

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

CodePad.

Многоразовая функция

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

Объяснение

  1. \[ соответствует буквальному значению [.
  2. (\w+) Сопоставьте 1 или более символов слова и сохраните в группе захвата 1.
  3. = Совпадение с литералом =.
  4. .*? Без жадности сопоставьте все символы, кроме \n, между = и :.
  5. : Совпадение с литералом :.
  6. (.*?) Без жадности сопоставьте все символы, кроме \n, между : и ] и сохраните в группе захвата 2.
  7. \] Совпадение с литералом ].
  8. (.*?) Без жадности сопоставьте каждый символ, кроме \n, между : и ] и сохраните в группе захвата 3.
  9. \[ Совпадение с литералом [.
  10. /\1\2 Снова сопоставьте предыдущие группы захвата.
  11. \] Совпадение с литералом ].
person alex    schedule 19.05.2011
comment
Термин, который я чаще всего вижу для обозначения нежадности, экономичен. - person Andy Lester; 21.12.2012

Почему бы вам не использовать средства синтаксического анализа BBCode, встроенные в PHP?

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

person Andy Lester    schedule 20.12.2012

В настоящее время используйте собственную функцию phpbb https://wiki.phpbb.com/Strip_bbcode.

person Stuck    schedule 24.03.2017