PHP preg-replace bbcodes

Пожалуйста, я создаю wap-форум, и я хочу, чтобы администратор мог добавлять bbcodes из базы данных с именем mycodes со столбцами: id, name, code, html

Row1
Name: bold
Code: \[b\](.*?)\[/b]
Html: < b >$1< / b >

Row2
Name: undaline
Code: \[u\](.*?)\[/u]
Html: < u >$1< / u >

Когда я использую preg replace, он работал только тогда, когда у меня есть одна строка, если у меня их больше одной, она не будет работать, она будет анализировать только жирный шрифт, но не подчеркивать?

function myparse($text){
  $q = mysql_query("SELECT * FROM mycodes");
  while($row = mysql_fetch_array($q)) {
    $code=$row['code'];
    $html=$row['html']
    $Result=preg_replace('#'.$code.'#is', $html, $text);
    return $result;
  }
}

myparse("hey am [b]bold[/b] but he is [u]undalined[/u]");

person Community    schedule 24.10.2012    source источник
comment
Откуда $row? Если вы хотите применить несколько выражений, я ожидаю увидеть какой-то цикл.   -  person Ja͢ck    schedule 24.10.2012


Ответы (3)


Зачем изобретать велосипед:

http://www.christian-seiler.de/projekte/php/bbcode/index_en.html (также есть ссылки на некоторые альтернативы)

Или даже библиотеку PECL: http://uk1.php.net/manual/en/book.bbcode.php

person Brian    schedule 24.10.2012

Я не вижу ничего в вашей функции myparse, которая перебирает ваши строки кодов. Итак, исходя из вашего текущего кода, вам понадобится цикл для многократного вызова preg_replace:

function myparse($text){
    // Loop through rows (this might be a database or whatever stores your rows.
    // Since your code doesn't tell us I'll assume it's an array for now
    foreach ($rows as $row) {
        $code=$row['code'];
        $html=$row['html'];
        $Result=preg_replace('#'.$code.'#is', $html, $text);
    }
}
person davidethell    schedule 24.10.2012
comment
Пожалуйста, ответьте мне, я отредактировал это - person Trapcode; 24.10.2012

У вас есть пара ошибок в вашем коде. Правильная функция должна быть такой:

function myparse($text){
    $q = mysql_query("SELECT * FROM mycodes");
    while($row = mysql_fetch_array($q)) {
        $code=$row['code'];
        $html=$row['html']
        $text=preg_replace('#'.$code.'#is', $html, $text);
    }
    return $text;
}

В вашем коде фактически используется только первая строка в mycodes.

person Oleg Liski    schedule 24.10.2012