Газа phpbb bbcode - PullRequest
       8

Газа phpbb bbcode

2 голосов
/ 19 мая 2011

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

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

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

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

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

Ответы [ 4 ]

5 голосов
/ 19 мая 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. \] Соответствует литералу ].
0 голосов
/ 24 марта 2017

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

0 голосов
/ 21 декабря 2012

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

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

0 голосов
/ 20 мая 2011

Вот один из 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);
}
...