elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado:


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web
| | |-+  PHP (Moderador: #!drvy)
| | | |-+  Tutorial BBCODE en PHP [By Javier G.]
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Tutorial BBCODE en PHP [By Javier G.]  (Leído 3,042 veces)
invisible_hack


Desconectado Desconectado

Mensajes: 978


Invisible_Hack™ Nick Registrado ^^


Ver Perfil WWW
Tutorial BBCODE en PHP [By Javier G.]
« en: 6 Abril 2010, 20:05 pm »

En este sencillo tutorial enseñare a crear los BBCODES, para quienes no sepan que son los BBCODES , son las etiquetas como:

Código
  1.  
  2. [b][/b]
  3. [i][/i]
  4. [u][/u]
  5.  
  6.  

Y muchas mas, tambien podemos poner nuestros emoticones...

Bueeno comenzamos :

Primero debemos definir las etiquetas que vamos a crear.

Código
  1.  
  2. $etiquetas = array(
  3. ':)' => '<img src="http://loginwebs.webcindario.com/feliz.gif" />',
  4. ';)' => '<img src="http://loginwebs.webcindario.com/wink.gif" />',
  5. ':D' => '<img src="http://loginwebs.webcindario.com/cheesy.gif" />',
  6. ':@' => '<img src="http://loginwebs.webcindario.com/enojado.gif" />',
  7. '(H)' => '<img src="http://loginwebs.webcindario.com/cool.gif" />',
  8. ':P' => '<img src="http://loginwebs.webcindario.com/tongue.gif" />',
  9. '[b]' => '<span style="font-weight:bold">',
  10. '[/b]' => '</span>',
  11. )
  12.  

Entonces definimos que:

Código:
:)

 será
Ustedes pueden agregar mas utilidades o "Efectos"
Como vemos, ingresamos las etiquetas en un Array, el
que leeremos mas adelante para el reemplazo...
Ahora crearemos la funcion que hace el reemplazo en caso de que el usuario ingrese una de esas etiquetas:

Código
  1. function cambio( $codigo )
  2. {
  3. $search = array_keys( $GLOBALS['etiquetas'] );
  4. $codigo = str_replace( $search, $GLOBALS['etiquetas'], $codigo );
  5. return $codigo;
  6. }
  7.  
  8.  

Lo que hicimos fue crear la funcion cambio, que reemplazará las palabras encontradas y cambiarlas por el BBCODE Existente(Solo si lo hay, obvio).
Entonces nuestro codigo final sería:

Código
  1. <?php
  2. $etiquetas = array(
  3. ':)' => '<img src="http://loginwebs.webcindario.com/feliz.gif" />',
  4. ';)' => '<img src="http://loginwebs.webcindario.com/wink.gif" />',
  5. ':D' => '<img src="http://loginwebs.webcindario.com/cheesy.gif" />',
  6. ':@' => '<img src="http://loginwebs.webcindario.com/enojado.gif" />',
  7. '(H)' => '<img src="http://loginwebs.webcindario.com/cool.gif" />',
  8. ':P' => '<img src="http://loginwebs.webcindario.com/tongue.gif" />',
  9. '[b]' => '<span style="font-weight:bold">',
  10. '[/b]' => '</span>',
  11. );
  12. function cambio( $codigo )
  13. {
  14. $search = array_keys( $GLOBALS['etiquetas'] );
  15. $codigo = str_replace( $search, $GLOBALS['etiquetas'], $codigo );
  16. return $codigo;
  17. }
  18. ?>
  19.  
  20.  

Pero ustedes dirán ... Y como lo implemento ?
Crearemos un Formulario, algo así como un Libro de Firmas o Visitas...
En caso que nuestro "Libro" se llame index.php ponen index.php en el action="" o lo cambian por el que ustedes tengan

Código
  1. <form action="index.php" method="post">
  2. <table border="0">
  3. <tr><td><b><font color=Silver>User:</td><td><input name=User maxlength=10><b> 10 Caracteres maximo.</b></td></tr></br>
  4. <tr><td><b><font color=Silver>Mensaje:</td><td><textarea name=usuario cols=75 rows=6 onkeypress="return maxLength(event,this,100);"></textarea></td></tr></br>
  5. <tr><td/><td><button><img src="http://foro.portalhacker.net/Themes/miembro/images/spanish_es-utf8/reply.gif"></button><b> 100 Caracteres Maximo</b> .
  6. </td></tr>
  7. </form>
  8.  
  9.  

Como ven, ahí creamos el Mini Formulario donde ingresaran el Nick y el mensaje en el libro de visitas...
Y al mismo le ponemos nuestro PHP , al que le he agregado algunas cosas:

Código
  1. <?php
  2. $usuario = htmlspecialchars($_REQUEST['usuario'], ENT_QUOTES);
  3. $user = htmlspecialchars($_REQUEST['User'], ENT_QUOTES);
  4. $etiquetas = array(
  5. ':)' => '<img src="http://loginwebs.webcindario.com/feliz.gif" />',
  6. ';)' => '<img src="http://loginwebs.webcindario.com/wink.gif" />',
  7. ':D' => '<img src="http://loginwebs.webcindario.com/cheesy.gif" />',
  8. ':@' => '<img src="http://loginwebs.webcindario.com/enojado.gif" />',
  9. '(H)' => '<img src="http://loginwebs.webcindario.com/cool.gif" />',
  10. ':P' => '<img src="http://loginwebs.webcindario.com/tongue.gif" />',
  11. '[b]' => '<span style="font-weight:bold">',
  12. '[/b]' => '</span>',
  13. );
  14. function cambio( $codigo )
  15. {
  16. $search = array_keys( $GLOBALS['etiquetas'] );
  17. $codigo = str_replace( $search, $GLOBALS['etiquetas'], $codigo );
  18. return $codigo;
  19. }
  20. $fp = fopen("mensaje.txt", "a"); // Si no quieres que la lista sea privada dale otro nombre.
  21.    fputs($fp, "<b><font color=Silver>  Mensaje ".cambio( $user )." : ".cambio( $mensaje )."<br><hr>");
  22.    fclose($fp);
  23. ?>
  24. <?php
  25. include("mensaje.txt");
  26. ?>
  27.  
  28.  
  29.  

Como vemos, al principio puse un filtro para evitar XSS en nuestro Libro
Tambien creamos un log de mensajes con:

Código
  1. fputs($fp, <b><font color=Silver>  Mensaje ".cambio( $user )." : ".cambio( $mensaje )."<br><hr>");
  2.    fclose($fp);
  3. ?>
  4.  
  5.  
  6.  

El cual será mostrado luego con el :

Código
  1. <?php
  2. include("mensaje.txt");
  3. ?>
  4.  
  5.  

Y así logramos tener nuestro "Libro de Visitas" Con etiquetas BBCODE y un Lindo Anti XSS, como no trabajamos con Bases de Datos, no corremos riesgo de SQLi...
Bueno y lo que les interesaría supongo yo, es el codigo final...

Código
  1. <form action="index.php" method="post">
  2. <table border="0">
  3. <tr><td><b><font color=Silver>User:</td><td><input name=User maxlength=10><b> 10 Caracteres maximo.</b></td></tr></br>
  4. <tr><td><b><font color=Silver>Mensaje:</td><td><textarea name=usuario cols=75 rows=6 onkeypress="return maxLength(event,this,100);"></textarea></td></tr></br>
  5. <tr><td/><td><button><img src="http://foro.portalhacker.net/Themes/miembro/images/spanish_es-utf8/reply.gif"></button><b> 100 Caracteres Maximo</b> .
  6. </td></tr>
  7. </table>
  8. </form>
  9. <?php
  10. $usuario = htmlspecialchars($_REQUEST['usuario'], ENT_QUOTES);
  11. $user = htmlspecialchars($_REQUEST['User'], ENT_QUOTES);
  12. $etiquetas = array(
  13. ':)' => '<img src="http://loginwebs.webcindario.com/feliz.gif" />',
  14. ';)' => '<img src="http://loginwebs.webcindario.com/wink.gif" />',
  15. ':D' => '<img src="http://loginwebs.webcindario.com/cheesy.gif" />',
  16. ':@' => '<img src="http://loginwebs.webcindario.com/enojado.gif" />',
  17. '(H)' => '<img src="http://loginwebs.webcindario.com/cool.gif" />',
  18. ':P' => '<img src="http://loginwebs.webcindario.com/tongue.gif" />',
  19. '[b]' => '<span style="font-weight:bold">',
  20. '[/b]' => '</span>',
  21. );
  22. function cambio( $codigo )
  23. {
  24. $search = array_keys( $GLOBALS['etiquetas'] );
  25. $codigo = str_replace( $search, $GLOBALS['etiquetas'], $codigo );
  26. return $codigo;
  27. }
  28. $fp = fopen("mensaje.txt", "a"); // Si no quieres que la lista sea privada dale otro nombre.
  29.    fputs($fp, "<img width=10 src=http://foro.portalhacker.net/Themes/miembro/images/on.gif><b><font color=Silver>  Mensaje ".cambio( $user )." : ".cambio( $mensaje )."<br><hr>");
  30.    fclose($fp);
  31. ?>
  32. <?php
  33. include("mensaje.txt");
  34. ?>
  35.  
  36.  

Fuente: PortalHacker
Autor: Javier G.


Aclaro que como bien he puesto en el título del tema, yo no soy el creador de este tutorial, pero el otro día andaba buscando como implementar bbcodes en PHP para añadirle la función nueva a mi próxima versión de mi libro de visitas, y di con ese post, y me pareció útil, además he visto que en esta misma sección había un post de un usuario que preguntaba sobre esto mismo, asi que a todos nos servirá de ayuda  :P


« Última modificación: 6 Abril 2010, 20:09 pm por invisible_hack » En línea

"Si no visitas mi blog, Chuck te dará una patada giratoria"
дٳŦ٭
GNU/Linux Infrastructure Specialist
Ex-Staff
*
Desconectado Desconectado

Mensajes: 5.110


Ver Perfil WWW
Re: Tutorial BBCODE en PHP [By Javier G.]
« Respuesta #1 en: 7 Abril 2010, 01:10 am »

Interesante, pero se extrañan las expresiones regulares  :xD gracias por el tuto  ;)


En línea

0x5d

Desconectado Desconectado

Mensajes: 241



Ver Perfil WWW
Re: Tutorial BBCODE en PHP [By Javier G.]
« Respuesta #2 en: 7 Abril 2010, 06:49 am »

Interesante, pero se extrañan las expresiones regulares  :xD gracias por el tuto  ;)
Sorry, pero me enfoque mas en llegar al punto del BBCODE
y No tanto de explicar las condiciones y esas cosas.

Luego quizas saco una nueva version del tutorial donde explique mas.
En línea

sirdarckcat
Aspirante a supervillano
Colaborador
***
Desconectado Desconectado

Mensajes: 7.029


No estoy loco, soy mentalmente divergente


Ver Perfil WWW
Re: Tutorial BBCODE en PHP [By Javier G.]
« Respuesta #3 en: 7 Abril 2010, 08:03 am »

Mmm esta bien, pero no podria ser usado en varias tags de BBC como [url], [img], etc..


Saludos!!
En línea

0x5d

Desconectado Desconectado

Mensajes: 241



Ver Perfil WWW
Re: Tutorial BBCODE en PHP [By Javier G.]
« Respuesta #4 en: 8 Abril 2010, 03:31 am »

Mmm esta bien, pero no podria ser usado en varias tags de BBC como [url], [img], etc..


Saludos!!

Que raro...
Yo probe esos tags y si me funcionaron.
En línea

Shell Root
Moderador Global
***
Desconectado Desconectado

Mensajes: 3.723


<3


Ver Perfil WWW
Re: Tutorial BBCODE en PHP [By Javier G.]
« Respuesta #5 en: 8 Abril 2010, 03:56 am »

Emmm no creo que lo dijera porque no funcionará, sino por la seguridad...  :silbar:
En línea

Por eso no duermo, por si tras mi ventana hay un cuervo. Cuelgo de hilos sueltos sabiendo que hay veneno en el aire.
jdc


Desconectado Desconectado

Mensajes: 3.406


Ver Perfil WWW
Re: Tutorial BBCODE en PHP [By Javier G.]
« Respuesta #6 en: 8 Abril 2010, 04:18 am »

Emmm no creo que lo dijera porque no funcionará, sino por la seguridad...  :silbar:


nop, lo dice solo porque no funcionaran :) piensa como lo harias siguiendo la base para usarlos :)

El script reemplaza etiqueta de inicio y etiqueta de fin, bajo ese concepto habria que modificar la forma en que trabaja para hacerlo.

Ademas la seguridad... mmm usa htmlspecialchars y ent_quotes asi que quizas se salve de los xss frecuentes, aun asi esta buena la idea para usar smilies :)
En línea

sirdarckcat
Aspirante a supervillano
Colaborador
***
Desconectado Desconectado

Mensajes: 7.029


No estoy loco, soy mentalmente divergente


Ver Perfil WWW
Re: Tutorial BBCODE en PHP [By Javier G.]
« Respuesta #7 en: 8 Abril 2010, 04:40 am »

no funcionara y ademas sera inseguro y tendra XSS


Código:
[img];)[/img]


sera reemplazado incorrectamente por
Código:
<img src="<img src="http://loginwebs.webcindario.com/wink.gif" />" />


por lo tanto, no funcionara y:


Código:
[img][img]onerror=alert(1)//[/img]


sera reemplazado por


Código:
<img src="<img src="onerror=alert(1)//" />


que tiene XSS.

recomiendo que pongan una advertencia en el codigo de que no se use con [img] y [url] y demas..

Saludos!!
« Última modificación: 8 Abril 2010, 04:45 am por sirdarckcat » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines