Foros del Web » Programando para Internet » PHP »

BBCode: Problemas con anidar citas

Estas en el tema de BBCode: Problemas con anidar citas en el foro de PHP en Foros del Web. Muy buenas. Tengo un problema con un BBCode, que resulta que no puedo anidar citas en un foro. He intentado resolverlo hace algunos meses, pero ...
  #1 (permalink)  
Antiguo 09/09/2008, 04:45
Avatar de pzin
Moderata 😈
 
Fecha de Ingreso: julio-2002
Ubicación: Islas Canarias
Mensajes: 10.488
Antigüedad: 21 años, 8 meses
Puntos: 2114
BBCode: Problemas con anidar citas

Muy buenas.

Tengo un problema con un BBCode, que resulta que no puedo anidar citas en un foro. He intentado resolverlo hace algunos meses, pero no encuentro la solución.

El código que uso es éste:
Código PHP:
function reescribir ($str) {

$busqueda = array(
'/\[b\](.*?)\[\/b\]/is',
'/\[i\](.*?)\[\/i\]/is',
'/\[u\](.*?)\[\/u\]/is',
'/\[img\=(.*?)\]/is',
'/\[url\](.*?)\[\/url\]/is',
'/\[url\=(.*?)\](.*?)\[\/url\]/is',
'/\[cita\](.*?)\[\/cita\]/is',
'/\[cita\=(.*?)\](.*?)\[\/cita\]/is',
'/\[youtube\=http\:\/\/(.*?)\.youtube\.com\/watch\?v\=(.*?)\]/is'

);
$reemplazo = array(
'<strong>$1</strong>',
'<em>$1</em>',
'<u>$1</u>',
'<img src="$1" />',
'<a href="$1" target="_blank" rel="nofollow">$1</a>',
'<a href="$1" target="_blank" rel="nofollow">$2</a>',
'<span class="cita">Cita:<p class="textoCita">$1</p></span>',
'<span class="cita">$1 escribió:<p class="textoCita">$2</p></span>',
'    <object width="425" height="350">
        <param name="movie" value="http://www.youtube.com/v/$2"></param>
        <param name="wmode" value="transparent"></param>
        <embed src="http://www.youtube.com/v/$2" type="application/x-shockwave-flash" wmode="transparent" width="425" height="350"></embed>
    </object>'
);
$str preg_replace ($busqueda$reemplazo$str);

$str=smilies($str);

return 
$str;

He intentado, por ver si funcionaba, anidar dos citas en $busqueda directamente, pero ni con esas.

Muchas gracias.
  #2 (permalink)  
Antiguo 09/09/2008, 08:18
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: BBCode: Problemas con anidar citas

mira, en la pagina oficial de PHP justo en la parte donde se explica como funciona preg_replace_callback() también viene un ejemplo de bloques anidados (precisamente lo que necesitas)

Enlace:

http://www.php.net/manual/es/functio...e-callback.php

no te voy a decir donde viene, ni como implementarlo.... el ejemplo es claro, suerte!

mas bien, aquí pongo el código... haber si sale

Código PHP:
<?php
$entrada 
"plano[indent] profundo[indent] más profundo [/indent]profundo [/indent]plano";

function 
procesarEtiquetasRecursivamente($entrada)
{

    
$regex '#\[indent]((?:[^[]|\[(?!/?indent])|(?R))+)\[/indent]#';

    if (
is_array($entrada)) {
        
$entrada '<div style="margin-left: 10px">'.$entrada[1].'</div>';
    }

    return 
preg_replace_callback($regex'procesarEtiquetasRecursivamente'$entrada);
}

$salida procesarEtiquetasRecursivamente($entrada);

echo 
$salida;
?>
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 09/09/2008, 14:19
Avatar de pzin
Moderata 😈
 
Fecha de Ingreso: julio-2002
Ubicación: Islas Canarias
Mensajes: 10.488
Antigüedad: 21 años, 8 meses
Puntos: 2114
Respuesta: BBCode: Problemas con anidar citas

¡Gracias pateketrueke!
Funciona perfectamente. No conocía preg_replace_callback().
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 06:22.