Foros del Web » Programando para Internet » PHP »

Problema con recursividad

Estas en el tema de Problema con recursividad en el foro de PHP en Foros del Web. Hola gente: Hace unas semanas deje un tema y nadie me respondio, no si se porque no tiene solución o bien, no me explique correctamente. ...
  #1 (permalink)  
Antiguo 23/03/2006, 22:16
Avatar de FuLaNo_  
Fecha de Ingreso: mayo-2003
Ubicación: Don Torcuato, Buenos Aires, Argentina
Mensajes: 1.250
Antigüedad: 20 años, 11 meses
Puntos: 2
Problema con recursividad

Hola gente:

Hace unas semanas deje un tema y nadie me respondio, no si se porque no tiene solución o bien, no me explique correctamente.

Tengo un problema de recursividad al cual no le encuentro solución; el problema esta en una simple funcion de BBCODE, más precisamente en el tag [citar] (igual al [ quote ] usando por estos foros).

Cuando cito un mensaje normal funciona correctamente, pero cuando tengo que citar un mensaje que YA contenia una cita, esta ultima no la toma como cita...

Cita:
Iniciado por FuLaNo_
hola mundo
Cita:
Iniciado por otro_usuario
hola mundo, otra vez
No puedo lograr algo tan simple como eso...

Aquí dejo TODA la función que estoy utilizando

Código PHP:
  function BBcode($texto) {
    
$texto SICS($texto);
    
$_BBcode = array(
      
':tomate:' => '<img src="img/f_tomate.gif" class="middle" alt="Tomates...">'':motosierra:' => '<img src="img/f_motosierra.gif" class="middle" alt="Motosierra">'':guitarrista:' => '<img src="img/f_guitarrista.gif" class="middle" alt="Guitarrista...">'':fumador:' => '<img src="img/f_fumador.gif" class="middle" alt="Fumador...">'':bob:' => '<img src="img/f_bob_marley.gif" class="middle" alt="Jamaiquino">'':ametralladora:' => '<img src="img/f_ametralladora.gif" class="middle" alt="Ametralladora">'':acade:' => '<img src="img/f_racing.gif" class="middle" alt="Racinguista">'':academico:' => '<img src="img/f_academico.gif" class="middle" alt="Academico">''¬¬' => '<img src="img/f_molesto.gif" class="middle" alt="Molesto...">'':yahoo:' => '<img src="img/f_yahoo.gif" class="middle" alt="Yahoo">'':arbitro:' => '<img src="img/f_arbitro.gif" class="middle" alt="Expulsado">'':pelea:' => '<img src="img/f_pelea.gif" class="middle" alt="Pelea">'':ninja:' => '<img src="img/f_ninja.gif" class="middle" alt="Ninja">'':ira:' => '<img src="img/f_ira.gif" class="middle" alt="Ira">'':silva:' => '<img src="img/f_chifla.gif" class="middle" alt="Silvando">'':box:' => '<img src="img/f_boxing.gif" class="middle" alt="Boxing...">'':beer:' => '<img src="img/f_birra.gif" class="middle" alt="Cerveza">'':baba:' => '<img src="img/f_babas.gif" class="middle" alt="Baboso">'':amor:' => '<img src="img/f_amor.gif" class="middle" alt="amor...">''[h1]' => '''[center]' => '''[/center]' => '''[right]' => '''[/right]' => '''[b]' => '''[/b]' => '''[i]' => '''[/i]' => '''[u]' => '''[/u]' => '''[/color]' => '''[color=blue]' => '''[color=green]' => '''[color=black]' => '''[color=red]' => '''[/h1]' => '''[h2]' => '''[/h2]' => '''[h3]' => '''[/h3]' => '''[h4]' => '''[/h4]' => '''[h5]' => '>''[/h5]' => '',  '[left]' => '''[/left]' => '''[t]' => '''[/t]' => '''[justify]' => '''[/justify]' => '''[title]' => '''[/title]' => '''[subtitle]' => '''[/subtitle]' => '''[mail]' => '''[/mail]' => ''':ouch:' => '<img src="img/f_ouch.gif" class="middle" alt="Ouch">',  ':)' => '<img src="img/f_sonrie.gif" class="middle" alt="Sonrie">'';)' => '<img src="img/f_guino.gif" class="middle" alt="Guiño">'':D' => '<img src="img/f_risa_gigante.gif" class="middle" alt="Risa gigante">'':(' => '<img src="img/f_triste.gif" class="middle" alt="Triste">'':no:' => '<img src="img/f_no_azul.gif" class="middle" alt="no">'':chau:' => '<img src="img/f_chau.gif" class="middle" alt="Chau!">'':emocionado:' => '<img src="img/f_saltarin.gif" class="middle" alt="Emocionado">'':si:' => '<img src="img/f_si.gif" class="middle" alt="Si">''0_o' => '<img src="img/f_sorprendido.gif" class="middle" alt="Sorprendido">''o_0' => '<img src="img/f_ojon.gif" class="middle" alt="Ojon">'':s' => '<img src="img/f_desconsertado.gif" class="middle" alt="Desconcertado">'':X' => '<img src="img/f_censurado.gif" class="middle" alt="Censurado">'':x' => '<img src="img/f_censurado.gif" class="middle" alt="Censurado">'':zzz:' => '<img src="img/f_dormido.gif" class="middle" alt="zZzZz">'':?:' => '<img src="img/f_quest.gif" class="middle" alt="?">'':lol:' => '<img src="img/f_lol.gif" class="middle" alt="">'':p' => '<img src="img/f_lengua.gif" class="middle" alt="Lengua">'':P' => '<img src="img/f_lengua.gif" class="middle" alt="Lengua">'':o' => '<img src="img/f_ooo.gif" class="middle" alt="">'':O' => '<img src="img/f_ooo.gif" class="middle" alt="">'':@' => '<img src="img/f_payaso.gif" class="middle" alt="Payaso">'':yes:' => '<img src="img/f_aprobado.gif" class="middle" alt="Aprobado!">'':nou:' => '<img src="img/f_desaprobado.gif" class="middle" alt="Desaprobado!">'':&' => '<img src="img/f_asqueado.gif" class="middle" alt="Asqueado">'':-(' => '<img src="img/f_lloron.gif" class="middle" alt="Lloron">'':cool:' => '<img src="img/f_cool.gif" class="middle" alt="Cool">''q:|' => '<img src="img/f_policia.gif" class="middle" alt="Policia">''X_o' => '<img src="img/f_pirata.gif" class="middle" alt="Pirata">'':aplausos:' => '<img src="img/f_aplausos.gif" class="middle" alt="Aplausos">''[/citar]' => '''[citar]' => '''[/recitar]' => '''[recitar]' => ''
    
);
    
    
// Negritas [b]texto[/b]
    
$texto preg_replace("`\[b\](.*?)\[/b\]`is"'<span class="font_bold">$1</span>'$texto);
    
// Italicas [i]texto[/i]
    
$texto preg_replace("`\[i\](.*?)\[/i\]`is"'<span class="font_italic">$1</span>'$texto);
    
// Subrayadas [u]texto[/u]
    
$texto preg_replace("`\[u\](.*?)\[/u\]`is"'<span class="font_unde">$1</span>'$texto);
    
// Tachadas [t]texto[/t]
    
$texto preg_replace("`\[t\](.*?)\[/t\]`is"'<span class="font_tach">$1</span>'$texto);
    
// Texto centrado [center]texto[/center]
    
$texto preg_replace("`\[center\](.*?)\[/center\]`is"'<p class="center">$1</p>'$texto);
    
// Texto izquierda [left]texto[/left]
    
$texto preg_replace("`\[left\](.*?)\[/left\]`is"'<p class="left">$1</p>'$texto);
    
// Texto derecha [right]texto[/right]
    
$texto preg_replace("`\[right\](.*?)\[/right\]`is"'<p class="right">$1</p>'$texto);
    
// Texto justificado [justify]texto[/justify]
    
$texto preg_replace("`\[justify\](.*?)\[/justify\]`is"'<p class="justify">$1</p>'$texto);
    
// Texto justificado [justify]texto[/justify]
    
$texto preg_replace("`\[color=(green|red|black|blue|violet|orange|graydark|graylight|cyan|olive|yellow|bluelight|bluedark|pink|greendark)\](.*?)\[/color\]`is"'<span class="color_$1">$2</span>'$texto);
    
    
// TAMAÑOS DE TEXTO
    
    // title  [title]texto[/title]
    
$texto preg_replace("`\[title\](.*?)\[/title\]`is"'<span class="FH1">$1</span>'$texto);
    
// subtitle  [subtitle]texto[/subtitle]
    
$texto preg_replace("`\[subtitle\](.*?)\[/subtitle\]`is"'<span class="FSH1">$1</span>'$texto);
    
// H1  [h1]texto[/h1]
    
$texto preg_replace("`\[h1\](.*?)\[/h1\]`is"'<span class="FH1">$1</span>'$texto);
    
// H2  [h2]texto[/h2]
    
$texto preg_replace("`\[h2\](.*?)\[/h2\]`is"'<span class="FH2">$1</span>'$texto); 
    
// H3  [h3]texto[/h3]
    
$texto preg_replace("`\[h3\](.*?)\[/h3\]`is"'<span class="FH3">$1</span>'$texto); 
    
// H4  [h4]texto[/h4]
    
$texto preg_replace("`\[h4\](.*?)\[/h4\]`is"'<span class="FH4">$1</span>'$texto); 
    

    
// URL's EXTERNAS
    
$texto preg_replace("`\[url\]\s*(.*?)\s*\[/url\]`is"'<a href="$1" target="_blank">$1</a>'$texto);
    
// URL's EXTERNAS
    
$texto preg_replace("`\[url=\s*(.*?)\]\s*(.*?)\s*\[/url\]`is"'<a href="$1" target="_blank">$2</a>'$texto);
    
    
// CITAR MENSAJE
    
$texto preg_replace("`\[citar\]\s*(.+?)\s*\[/citar\]`is"'<span class="bold">Cita:</span><div class="topic_quote">$1</div>'$texto);
    
// CITAR MENSAJE
    
$texto preg_replace("`\[citar=\s*(.+?)\s*\]\s*(.+?)\s*\[/citar\]`is"'<span class="bold">$1</span> escribió:<div class="topic_quote">$2</div>'$texto);

    
// CITAR MENSAJE
    
$texto preg_replace("`\[recitar=\s*(.+?)\s*\]\s*(.+?)\s*\[/recitar\]`is"'<span class="bold">$1</span> escribió:<div class="topic_requote">$2</div>'$texto);
    
// CITAR MENSAJE
    
$texto preg_replace("`\[recitar\]\s*(.+?)\s*\[/recitar\]`is"'<span class="bold">Cita:</span><div class="topic_requote">$1</div>'$texto);
    
    
// MAIL's
    
$texto preg_replace("`\[mail\]\s*(.*?)\s*\[/mail\]`is"'<a href="mailto:$1">$1</a>'$texto);
    
// MAIL's
    
$texto preg_replace("`\[mail=\s*(.*?)\]\s*(.*?)\s*\[/mail\]`is"'<a href="mailto:$1">$2</a>'$texto);

    
// IMAGENES
    
$texto preg_replace("`\[img=\s*(.*?)\s*\]`is"'<img src="$1" alt="" />'$texto);
    
    
// IMAGENES
    
$texto preg_replace("`\[img=\s*(.*?) \s*class=\s*(left|right|none|center|galery)\s*\]\s*(.*?)\s*\[/img\]`is"'<img src="$1" alt="$3" title="$3" class="$2" />'$texto);

    
// IMAGENES
    
$texto preg_replace("`\[img=\s*(.*?) \s*class=\s*(left|right|none|center|galery)\s* ?(.*?)\s*\]\s*(.*?)\s*\[/img\]`is"'<img src="$1" alt="$4" title="$4" class="$2" $3 />'$texto);

    
// IMAGENES
    
$texto preg_replace("`\[img]\s*(.*?)\s*\[/img\]`is"'<img src="$1" alt="" />'$texto);

    
$tips array_keys($_BBcode);
    
$finaltext str_replace($tips,$_BBcode$texto);
    
$finaltext stripslashes($finaltext);
    
$finaltext nl2br($finaltext);
    return 
$finaltext;
  } 
Esta es la parte de la cita:

Código PHP:
$texto preg_replace("`\[citar=\s*(.+?)\s*\]\s*(.+?)\s*\[/citar\]`is"'<span class="bold">$1</span> escribió:<div class="topic_quote">$2</div>'$texto); 
En teoria para que sea recursiva deberia ser similar a esto:

Código PHP:
$texto preg_replace("`\[citar=\s*(.+?)\s*\]\s*(.+?)\s*\[/citar\]`is"'<span class="bold">$1</span> escribió:<div class="topic_quote">BBcode($2)</div>'$texto); 
El problema es que al hacer esto ultimo la pagina me queda en blanco, como si no pudiese procesar nada, ni siquiera me envia errores...

Por favor necesito su ayuda para terminar con este tema....

Saludos!
__________________
I Love Programming...
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:02.