avevo trovato una bella funzione epr i bbcode scritta da un utente del forum
Codice PHP:
<?php
function bbcode($text) {
$bb_code[0] = '/(\\n)/i';
$bb_replace[0] = '
';
$bb_code[1] = '/(\[b\])(.*)(\[\/b\])/i';
$bb_replace[1] = '[b]${2}[/b]';
$bb_code[2] = '/(\[i\])(.*)(\[\/i\])/i';
$bb_replace[2] = '[i]${2}[/i]';
$bb_code[3] = '/(\[u\])(.*)(\[\/u\])/i';
$bb_replace[3] = '<u>${2}</u>';
$bb_code[4] = '/(\[url\=(.+?)\](.+?)\[\/url\])/i';
$bb_replace[4] = '[url="${2}"]${3}[/url]';
$bb_code[5] = '/(\[img\=(.+?)\])(.*)(\[\/img\])/i';
$bb_replace[5] = '[img]${2}[/img]';
$bb_code[6] = '/(\[align\=(left|right|center)\]([^\a]+?)\[\/align\])/i';
$bb_replace[6] = '<div align="${2}">${3}</div>';
//$bb_code[7] = '/(\[size\)(.*)(\[\/size\])/i';
$bb_code[7] = '/(\[size\=([1-9])\])([^\a]+?)(\[\/size\])/i';
$bb_replace[7] = '<span style="font-size: ${2}pt;">${3}</span>';
$bb_code[8] = '/(\[color\=([\#]?[0-9a-f]{3}|[\#]?[0-9a-f]{6}|[a-z]{3,})\]([^\a]+?)\[\/color\])/i';
$bb_replace[8] = '<span style="color: ${2};">${3}</span>';
$bb_code[9] = '/(\[code\])(.*)(\[\/code\])/i';
$bb_replace[9] = '<pre>${2}</pre>';
$bb_code[10] = '/(\[quote\])(.*)(\[\/quote\])/i';
$bb_replace[10] = '<pre>${2}</pre>';
$bb_code[11] = '/(\[hr])/i';
$bb_replace[11] = '<hr>';
$bb_code[12] = '/(\[list\])(.*)(\[\/list\])/i';//lista non ordinata
$bb_replace[12] = '<ul>${2}[/list]';
$bb_code[13] = '/(\[list\=1\]([^\a]+?)\[\/list\])/i'; //lista numerata
$bb_replace[13] = '[list=1]${2}[/list]';
$bb_code[14] = '/(\[list\=(a|A|i|I)\]([^\a]+?)\[\/list\])/i'; //lista ordinata con lettere o numeri romani
$bb_replace[14] = '[list=1]${3}[/list]';
$bb_code[15] = '/(\[\*\](.+?)\[\/\*\])/i'; //elemento della lista
$bb_replace[15] = '[*]${2}';
$return = preg_replace($bb_code, $bb_replace, $text);
return $return;
}
?>
funziona perfettamente quando nel testo c'è epr esempio solo un [ b] [ /b] oppure un solo [url =link] [/ url] etc.. ma quando c'è ne sono più di uno prende il primo tag di apertura e l'ultimo nel testo e quindi si sballa tutto..
qualcuno sa il perchè? e saprebbe correggemelo?