Citat:
Nemanja Avramović: Pa može preko regularnih izraza. Najlakše:
Code:
preg_match_all('/[b:(.*)](.*)[\/b:(.*)]/',$bbcode,$matches);
print_r($matches);
Nisam probao ali ovo bi trebalo da vrši posao. Verovatno (ne verovatno nego sigurno) ovaj regularni izraz može preciznije da se definiše ali ja sam totalni početnik kad su regularni izrazi u pitanju :)
Ovo gore neće raditi.
Karakteri "[" i "]" predstavljaju rezervisane karaktere, meta-karaktere.
Potrebno je backslash-ovati navedene karaktere.
Pa bi ovo gore trebalo da izgleda:
Code:
/\[b:(.*)\](.*)\[\/b:(.*)\]/U
Npr. jedno od rešenja je:
Code:
$pattern = '/\[((\w+):([\w\d]+))\](.+)\[\/\1\]/U';
$re = '<$2>$4</$2>';
$text = '[i:69f56c80cf]blablabla.[/i:69f56c80cf][b:69f56c80cf]petak 16. februar[/b:69f56c80cf]Blablabla.';
echo preg_replace($pattern, $re, $text);
Ovde gore može nastati problem jer korisnik može uneti bilo šta (npr. [div:123]asdf[/div:123]) i napraviti probleme u html kodu.
Jedno od rešenja ograničiti ono što će samo biti parsirano, npr samo "i" ili "b":
Code:
$pattern = '/\[(([ib]{1}):([\w\d]+))\](.+)\[\/\1\]/U';
E sada ukoliko želiš da imaš mogućnost da koristiš bb tagove jedan unutar drugog možeš napraviti rekurzivnu funkciju pomoću funkcije preg_replace_callback
Code:
$pattern = '/\[((\w+):([\w\d]+))\](.+)\[\/\1\]/U';
$text = '[i:69f56c80cf][b:69f56c80cf]blablabla.[/b:69f56c80cf][/i:69f56c80cf] [b:69f56c80cf]petak 16. februar[/b:69f56c80cf] Blablabla. [div:123]asdf[/div:123]';
function test($matches) {
global $pattern, $text;
if (is_array($matches)) {
switch($matches[2]) {
case 'i':
$matches = '<span style="font-style: italic;">' . $matches[4] . '</span>';
break;
case 'b':
$matches = '<span style="font-weight: bold;">' . $matches[4] . '</span>';
break;
}
}
return preg_replace_callback($pattern, 'test', $matches);
}
echo preg_replace_callback($pattern, 'test', $text);
Sve ovo moguće je i drugačije uraditi, možda sam nešto malo zakomplikovao ;). Moguće da ne prolazi neka kombinacija, ali možda posluži kao ideja.
Pozdrav.
[Ovu poruku je menjao Br@nkoR dana 19.02.2007. u 19:24 GMT+1]