Ver Mensaje Individual
  #1 (permalink)  
Antiguo 19/06/2009, 04:21
Alcalina
 
Fecha de Ingreso: marzo-2009
Mensajes: 42
Antigüedad: 16 años
Puntos: 5
Anidar BBCode con esta función

Tengo una función para interpretar el BBCode y funciona bien excepto cuando anido un BBCode dentro de otro, por ejemplo
Código HTML:
Esto lo permite
[align=center]Centrado[/align]
[b]Negrita[/b]
Pero esto no lo permite
[align=center][b]Centrado en negrita[/b][/align] ya que me lo muestra centrado pero con los tags [b][/b] a los lados..
Mi funcion es esta

Código PHP:
function BBcode($texto,$dbl){
   
$texto htmlentities($texto);
   
$a = array(
      
"/\[i\](.*?)\[\/i\]/is",
      
"/\[b\](.*?)\[\/b\]/is",
      
"/\[u\](.*?)\[\/u\]/is",
      
"/\[s\](.*?)\[\/s\]/is",
      
"/\[align=(left|center|right|justify)\](.*?)\[\/align\]/is",
      
"/\[color=(.*?)\](.*?)\[\/color\]/is",
      
"/\[img\](.*?)\[\/img\]/is",
      
"/\[hr\]/is",
      
"/\[code\](.*?)\[\/code\]/is",
      
"/\[list\](.*?)\[\/list\]/is",
      
"/\[li\](.*?)\[\/li\]/is",
      
"/\[size=(.*?)pt\](.*?)\[\/size\]/is"
   
);
   
$b = array(
      
"<span style='font-style:italic'>$1</span>",
      
"<span style='font-weight:bold'>$1</span>",
      
"<span style='text-decoration:underline'>$1</span>",
      
"<span style='text-decoration:line-through'>$1</span>",
      
"<div style='text-align: $1'>$2</div>",
      
"<span style='color: $1'>$2</span>"
      
"<img src=\"$1\">",
      
"<hr>",
      
"<textarea cols='55' rows='4'>$1</textarea>",
      
"<ul>$1</ul>",
      
"<li>$1</li>",
      
"<span style='font-size: $1'>$2</span>",
   );
   
   
$query query ("SELECT * FROM iconos",$dbl);
    while (
$row fetch_array($query))
    {
      
$a[] = "'".$row['code']."'";
      
$b[] = "<img src='.".$row['url']."' title='".$row['nombre']."' alt='".$row['nombre']."'>";
    }

   
$texto preg_replace($a$b$texto);
      
$texto nl2br($texto);
   return 
$texto;

$dbl es la conexión a la base de datos.
Se os ocurre alguna idea de como se puede solucionar?