Agrega estas dos funciones:
Código PHP:
function contar_open_tags($str) {
preg_match_all ('/\[QUOTE\=(.*?)\]/i', $str, $matches);
$opentags = count($matches['0']);
preg_match_all ('/\[QUOTE\]/i', $str, $matches2);
$opentags = $opentags+count($matches2['0']);
return ($opentags > 0) ? $opentags : false;
}
function contar_close_tags($str) {
preg_match_all ('/\[\/QUOTE\]/i', $str, $matches);
$closetags = count($matches['0']);
return ($closetags > 0) ? $closetags : false;
}
y tu funcion bbcode_quote() queda asi:
Código PHP:
function bbcode_quote ($str) {
$open = '<blockquote style="border-left: 1px solid #000;">';
$close = '</blockquote>';
// How often is the open tag?
$opentags = contar_open_tags($str);
// How often is the close tag?
$closetags = contar_close_tags($str);
// Check how many tags have been unclosed
// And add the unclosing tag at the end of the message
$unclosed = $opentags - $closetags;
for ($i = 0; $i < $unclosed; $i++) {
$str .= '[/quote]';
}
// Do replacement
$search = array( "/\[quote\](.*?)\[\/quote\]/is","/\[quote\=(.*?)\](.*?)\[\/quote\]/is" );
$replace = array( "\n$open\n$1\n$close\n","\n$open\n<b><i>Publicado por $1</i></b>\n<br />\n$2\n$close\n" );
while(contar_open_tags($str)) {
$str = preg_replace( $search, $replace, $str );
}
return preg_replace( $search, $replace, $str );
}
Asi te debe funcionar bien...
Prueba con esto:
Código PHP:
ob_start();
//AQUI EMPIEZA EL MENSAJE
?>
Hola, este es mi mensaje. Veamos como funciona esto:
[quote=okram]
Yo publique este mensaje, pienso qe va a funcionar. NO cerrare este quote, pero habra otros anidados:
[quote]
Este no tiene autor
[/quote]
Ya se cerro el quote sin autor, pero recuerden que no cerrare el primer quote
[quote=algo]
Segundo post con autor algo
[quote]
Este no tiene autor
[/quote]
Ya se cerro el quote sin autor
[quote=otro algo]
y ahora? esto lo publico otro algo
[quote]
Este no tiene autor
[/quote]
Cerro quote sin autor
[quote=otro algo mas]
y ahora? esto lo publico otro algo mas
[quote]
Este no tiene [b]autor[/b], pero esto esta en [i]cursiva[/i]
[/quote]
[/quote]
Cerro quote de otro algo mas
[/quote]
[/quote]
Termino el segundo con autor algo
<?php
$str = ob_get_contents();
ob_end_clean();
echo bbcode_quote($str);
LIVE EXAMPLE:
Funcionando: http://ejemplos.fdw.myokram.info/quote/ Código: http://ejemplos.fdw.myokram.info/quote/?source
Un saludo,