Ayuda con BBCode

Iniciado por naderST, 15 Marzo 2009, 02:47 AM

0 Miembros y 1 Visitante están viendo este tema.

naderST

Bueno estaba intentando implementar los bbcode pero a la hora de hacer lo de la etiqueta "code" me hago un desastre porque si ponen dentro de la etiqueta "code" la etiqueta de letra negrita "b" se pone negrita el código dentro de la etiqueta "code" igual con los links y demas... y eso no es bueno xD. Aca les dejo el codigo que uso:

Código (php) [Seleccionar]

<?php
function bbcode($str){
$str nl2br($str);
$str preg_replace('/\[b\](.*?)\[\/b\]/is''<b>$1</b>'$str); 
$str preg_replace('/\[i\](.*?)\[\/i\]/is''<i>$1</i>'$str);
$str preg_replace('/\[u\](.*?)\[\/u\]/is''<u>$1</u>'$str);
$str preg_replace('/\[url\](.*?)\[\/url\]/is''<a href="$1" target="_blank">$1</a>'$str);
$str preg_replace('/\[url\=(.*?)\](.*?)\[\/url\]/is''<a href="$1" target="_blank">$2</a>'$str);
$str preg_replace('/\[img\](.*?)\[\/img\]/is''<img src="$1" border="0" />'$str);

$str preg_replace('#\[code\](.*)\[/code\]#ise''\'<b>Código:</b><br /><div class="codigo">\'.highlight_string(stripslashes(str_replace(\'<br />\', \'\', \'$1\')), true).\'</div>\''$str);
return 
$str;
}
?>


Agente Naranja

#1
Podrías intentar eliminar todas las etiquetas "b" y demás dentro de tu etiqueta "code". Haz un WHILE y verifica que dentro de "code" no haya ninguna otra etiqueta. Al menos eso se me ocurre a mi.

naderST

Pero si te fijas en el bbcode del foro si tu colocas la etiqueta "b" dentro de la etiqueta "code" no la elimina simplemente no se pone la letra en negrita.

Agente Naranja

Hum...en ese caso, qué te parece buscar una etiqueta de apertura, buscar su etiqueta de cierre e ignorar todas las etiquetas dentro de dicha etiqueta?

naderST

#4
Dejame probar y te cuento  :P gracias.

EDIT:

Solucione el problema pero ahora se me presenta otro problema fijense

$str = preg_replace('#\[code\](.*)\[/code\]#ise', '\'<b>Código:</b><br /><div class="codigo">\'.codeclear(\'$1\').\'</div>\'', $str);

Ok ahora el problema viene si uso 2 veces la etiqueta [ code ] fijense lo que pasa ejemplo:

[ code ]
dasdasdasdasdasdasdas
[ /code ]

[ code ]
dasdasdasdasdasdasdas
[ /code ]

Me deberia mostrar dos divs con los codigos pero sem ete todo en un solo div y queda asi:

dasdasdasdasdasdasdas
[ /code ]
[ code ]
dasdasdasdasdasdasdas

No se si me explique bien  :xD pero espero que me puedan ayudar  :P