Foro de elhacker.net

Programación => PHP => Mensaje iniciado por: naderST en 14 Agosto 2008, 03:34 am



Título: Ayuda BBCode
Publicado por: naderST en 14 Agosto 2008, 03:34 am
Buenas estoy haciendo una funcion para implementar bbcode, esto es lo que llevo:

Código
  1. <?php
  2. function bbcode($str){
  3. $str = htmlentities($str);
  4. $str = str_replace("<", "&lt;", $str);
  5. $str = str_replace(">", "&gt;", $str);
  6. $str = preg_replace('/\[b\](.*?)\[\/b\]/is', '<b>$1</b>', $str);
  7. $str = preg_replace('/\[i\](.*?)\[\/i\]/is', '<i>$1</i>', $str);
  8. $str = preg_replace('/\[u\](.*?)\[\/u\]/is', '<u>$1</u>', $str);
  9. $str = preg_replace('/\[url\](.*?)\[\/url\]/is', '<a href="$1" target="_blank">$1</a>', $str);
  10. $str = preg_replace('/\[url\=(.*?)\](.*?)\[\/url\]/is', '<a href="$1" target="_blank">$2</a>', $str);
  11. $str = preg_replace('/\[img\](.*?)\[\/img\]/is', '<div id="imagen"><img src="$1" border="0" /></div>', $str);
  12. $str = preg_replace('/\[quote\=(.*?)\](.*?)\[\/quote\]/is', '<b>$1 dijo:</b><br /><div id="codigo"><code>$2</code></div>', $str);
  13. $str = preg_replace('/\[color\=(.*?)\](.*?)\[\/color\]/is', '<span style="color:$1">$2</span>', $str);
  14. $str = preg_replace('/\[size\=(.*?)\](.*?)\[\/size\]/is', '<font size="$1">$2</font>', $str);
  15. $str = preg_replace('/\[list\](.*?)\[\/list\]/is', '<ul>$1</ul>', $str);
  16. $str = preg_replace('/\[li\](.*?)\[\/li\]/is', '<li>$1</li>', $str);
  17. $str = str_replace("<ul><br />", "<ul>", $str);
  18. $str = str_replace("</li><br />", "</li>", $str);
  19. $str = preg_replace('/\[code\](.*?)\[\/code\]/is', '<b>Código:</b><br /><div id="codigo"><code>$1</code></div>', $str);
  20. $str = nl2br($str);
  21. return $str;
  22.  
  23. }
  24. ?>
  25.  

La cuestion es en la etiqueta code quiero que si se pone dentro de ella la etiqueta [ b ] no se ponga en negrita ni nada, no se si me explico.

Gracias.


Título: Re: Ayuda BBCode
Publicado por: Diabliyo en 19 Agosto 2008, 21:05 pm
Buenas estoy haciendo una funcion para implementar bbcode, esto es lo que llevo:

Código
  1. <?php
  2. function bbcode($str){
  3. $str = htmlentities($str);
  4. $str = str_replace("<", "&lt;", $str);
  5. $str = str_replace(">", "&gt;", $str);
  6. $str = preg_replace('/\[b\](.*?)\[\/b\]/is', '<b>$1</b>', $str);
  7. $str = preg_replace('/\[i\](.*?)\[\/i\]/is', '<i>$1</i>', $str);
  8. $str = preg_replace('/\[u\](.*?)\[\/u\]/is', '<u>$1</u>', $str);
  9. $str = preg_replace('/\[url\](.*?)\[\/url\]/is', '<a href="$1" target="_blank">$1</a>', $str);
  10. $str = preg_replace('/\[url\=(.*?)\](.*?)\[\/url\]/is', '<a href="$1" target="_blank">$2</a>', $str);
  11. $str = preg_replace('/\[img\](.*?)\[\/img\]/is', '<div id="imagen"><img src="$1" border="0" /></div>', $str);
  12. $str = preg_replace('/\[quote\=(.*?)\](.*?)\[\/quote\]/is', '<b>$1 dijo:</b><br /><div id="codigo"><code>$2</code></div>', $str);
  13. $str = preg_replace('/\[color\=(.*?)\](.*?)\[\/color\]/is', '<span style="color:$1">$2</span>', $str);
  14. $str = preg_replace('/\[size\=(.*?)\](.*?)\[\/size\]/is', '<font size="$1">$2</font>', $str);
  15. $str = preg_replace('/\[list\](.*?)\[\/list\]/is', '<ul>$1</ul>', $str);
  16. $str = preg_replace('/\[li\](.*?)\[\/li\]/is', '<li>$1</li>', $str);
  17. $str = str_replace("<ul><br />", "<ul>", $str);
  18. $str = str_replace("</li><br />", "</li>", $str);
  19. $str = preg_replace('/\[code\](.*?)\[\/code\]/is', '<b>Código:</b><br /><div id="codigo"><code>$1</code></div>', $str);
  20. $str = nl2br($str);
  21. return $str;
  22.  
  23. }
  24. ?>
  25.  

Cambia el orden como vas haciendo tu BBCode, primero pon el preg_replace() de la estiqueda de CODE, y cuando la insetes en el STR insertala asi: htmlentities( $1, ENT_QUOTES ); y listo....



La cuestion es en la etiqueta code quiero que si se pone dentro de ella la etiqueta [ b ] no se ponga en negrita ni nada, no se si me explico.

Gracias.