Foros del Web » Programando para Internet » PHP »

parser de bbcode

Estas en el tema de parser de bbcode en el foro de PHP en Foros del Web. Hola. Estoy intentando un parser de BBcode. en realidad ya esta pero de una forma bastante rudimentaria, osea asi: Código PHP: function  bbcode ( $texto ...
  #1 (permalink)  
Antiguo 09/03/2003, 14:06
Avatar de MSDark  
Fecha de Ingreso: noviembre-2002
Ubicación: Talca VII región
Mensajes: 337
Antigüedad: 15 años, 1 mes
Puntos: 1
parser de bbcode

Hola.

Estoy intentando un parser de BBcode. en realidad ya esta pero de una forma bastante rudimentaria, osea asi:

Código PHP:
function bbcode($texto)
{
$texto=nl2br($texto);
$texto=str_replace("[ b]","<b>",$texto);/*Obviamente sin espacion solo los puse asi para que el foro no lo reconociera como bbcode de el*/

/** Y asi con cada codigo */

return $texto;

Cosa que es realmente engorrosa, entonces crei que se podria hacer poniendo dentro de un array todos los "bbcode" y detro de otro array poner el "html".

asi:

Código PHP:
function bbcode($texto)
{

$code = array("[ b]","[ /b]");
$html = array("<b>","</b>");
$textopreg_replace($code,$html,$texto);
return 
$texto;
}
echo 
bbcode("[ b]Hola[ /b] chao"); 
y el resultado que eso me da es

[]Hola[/] chao
luego quise hacerlo de la siguiente forma

Código PHP:
function bbcode($texto)
{
$code = array("/([)(b)(])(\r\n)*(.*)([/b])/siU",
          
"/([)(i)(])(\r\n)*(.*)([/i])/siU");
$html = array("<b>\5</b>",
          
"<i>\5</i>");

$texto=preg_replace($code$html$texto);
return 
$texto;
}

echo 
bbcode("[ b]Hola[ /b] chao"); 
Y el resultado de eso es lo siguiente+
Cita:
[ b]Hola[ /b] chaoPHP Warning: Unknown modifier 'b' in C:\WINDOWS\TEMP\~scp.php on line 10 PHP Warning: Unknown modifier ']' in C:\WINDOWS\TEMP\~scp.php on line 10
esa linea corresponde al preg_replace();


Entonces la pregunta es:

Que y como puedo hacer para la funcion de bbcode para no hacerla tan engorrosa como la primera muestra, osea para hacer un bucle mas funcional?


De antemano gracias

Saludos
__________________
DelirioLinux.. Software Libre y tecnología.. php también..
Saludos :arriba:
Usuario Linux #198486 y Ubuntu #12791
Gutsy Gibbon

Última edición por MSDark; 09/03/2003 a las 14:09
  #2 (permalink)  
Antiguo 09/03/2003, 18:49
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Si vas a usar expresiones regulares como lo haces cuando empleas preg_replace() por ejemplo .. deberias de leer un manual sobre Expresiones regulares .. Te lo comento por ejemplo porque para una expresión regular .. el [ ó ] son códigos que segun se usen hacen tal o cual cosa (he de ahí el comportamiento que te hace al usarlo como lo pretendes usar ..)

Si quieres hacerlo con expresiones regulares (es lo ideal) .. revisa atentamente los comentarios de los usuarios de las funciones de expresiones regulares (ya sean Poxit o compatibles Perl) .. erg_replace() .. preg_replace() .. etc

Y de paso este manual de Expresiones regulares .. Pues las expresiones regulares no son propias de PHP sino que PHP te pone a tu disposición funciones para usarlas ...

http://www.ignside.net/man/php/regex.php

Un saludo,
  #3 (permalink)  
Antiguo 09/03/2003, 20:49
Avatar de MSDark  
Fecha de Ingreso: noviembre-2002
Ubicación: Talca VII región
Mensajes: 337
Antigüedad: 15 años, 1 mes
Puntos: 1
Bueno asi estaba intentandolo, y buscando por ahi encontre esto

http://www.phpzone.cl/code/?id=35

de donde comenze a guiarme (con lo de las expresiones regulares) pero si pongo esas expresiones me devuelve error de

esta es la expresion:
Código PHP:
$code  = array("/([)(b)(])(\r\n)*(.*)([/b])/siU");
        
$html  = array( "<b>\5</b>");
        
$texto preg_replace($code,$html,$texto); 
Cita:
chaoPHP Warning: Unknown modifier 'b' in C:\WINDOWS\TEMP\~scp.php on line 8
linea 8 = preg_remplace();

entonces yo lo hice asi
Código PHP:

$code  
= array("/([)(b)(])/","/(:[\\/b])/siU");/*Con los : evito que aparescan ciertos signo osea <> */
        
$html  = array("<b>","</b>");
        
$texto preg_replace($code,$html,$texto); 
y eso me devuelve
Hola chao


teniendo en cuenta que esta es una funcion y hago esto
Código PHP:
echo bbcode("[ b]hola[ /b] chao"); 
los espacion son para que no los reconosca el foro


como lo puedo arreglas?

Gracias de antemano

Saludos
__________________
DelirioLinux.. Software Libre y tecnología.. php también..
Saludos :arriba:
Usuario Linux #198486 y Ubuntu #12791
Gutsy Gibbon

Última edición por MSDark; 09/03/2003 a las 20:52
  #4 (permalink)  
Antiguo 22/04/2003, 12:01
Avatar de jonk  
Fecha de Ingreso: julio-2002
Ubicación: Barakaldo
Mensajes: 104
Antigüedad: 15 años, 4 meses
Puntos: 0
Yo estaba buscando algo sobre el bbcode para poner en un foro k esto diseñando.

cogi la informacion de phpzone y la de la faq de foros web y lo modifique

el resultado es mu simple y solo es un poco de añadido.

si quieres puedes ver como keda en :

Prueba BBCODE
PD: Funciona todo, incluso los smileys . "citar" no esta definido todavia

Salu2



Cita:
Mensaje Original por MSDark
Bueno asi estaba intentandolo, y buscando por ahi encontre esto

http://www.phpzone.cl/code/?id=35

de donde comenze a guiarme (con lo de las expresiones regulares) pero si pongo esas expresiones me devuelve error de

esta es la expresion:
Código PHP:
$code  = array("/([)(b)(])(\r\n)*(.*)( 
Código PHP:
)/siU");
        $html  = array( "
<b>5</b>");
        $texto = preg_replace($code,$html,$texto); 

linea 8 = preg_remplace();

entonces yo lo hice asi
Código PHP:

$code  
= array("/([)(b)(])/","/(:[\\/b])/siU");/*Con los : evito que aparescan ciertos signo osea <> */
        
$html  = array("<b>","</b>");
        
$texto preg_replace($code,$html,$texto); 
y eso me devuelve
Hola chao


teniendo en cuenta que esta es una funcion y hago esto
Código PHP:
echo bbcode("[ b]hola[ /b] chao"); 
los espacion son para que no los reconosca el foro


como lo puedo arreglas?

Gracias de antemano

Saludos [/B]
__________________

MyWay. A mi manera
http://myway.i-barakaldo.com
  #5 (permalink)  
Antiguo 25/04/2003, 15:07
Avatar de MSDark  
Fecha de Ingreso: noviembre-2002
Ubicación: Talca VII región
Mensajes: 337
Antigüedad: 15 años, 1 mes
Puntos: 1
OK gracias pero podrias mostrarme como lo hiciste?
Es que no me manejo bien en los regexp.

Y aùn me da errores

Saludos
__________________
DelirioLinux.. Software Libre y tecnología.. php también..
Saludos :arriba:
Usuario Linux #198486 y Ubuntu #12791
Gutsy Gibbon
  #6 (permalink)  
Antiguo 25/04/2003, 19:16
 
Fecha de Ingreso: agosto-2002
Ubicación: Colón - Entre Rios - Argentina
Mensajes: 647
Antigüedad: 15 años, 4 meses
Puntos: 8
Adivinando la url llegue hasta aquí
http://www.i-barakaldo.com/vcode/
  #7 (permalink)  
Antiguo 25/04/2003, 19:18
 
Fecha de Ingreso: agosto-2002
Ubicación: Colón - Entre Rios - Argentina
Mensajes: 647
Antigüedad: 15 años, 4 meses
Puntos: 8
Pero al intentantar descargarlo no puedo
  #8 (permalink)  
Antiguo 25/04/2003, 20:55
Avatar de Manoloweb  
Fecha de Ingreso: enero-2002
Ubicación: Monterrey
Mensajes: 2.454
Antigüedad: 15 años, 10 meses
Puntos: 5
El problema que tienes es que los caracteres [ y ] son especiales en las expresiones regulares, por lo que debes escaparlas con \[
__________________
Manoloweb
  #9 (permalink)  
Antiguo 25/04/2003, 21:23
Avatar de jonk  
Fecha de Ingreso: julio-2002
Ubicación: Barakaldo
Mensajes: 104
Antigüedad: 15 años, 4 meses
Puntos: 0
Información el codigo

Aki pongo un enlace aun archivo con los codigos :)

Archivo -> Ejemplo BBCODE

espero que os sirve
:)

salu2
__________________

MyWay. A mi manera
http://myway.i-barakaldo.com
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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 13:28.