Autor Tema: bbcode [code][/code]  (Leído 431 veces)

Desconectado judoka

  • PHPero Avanzado
  • ****
  • Mensajes: 255
  • Karma: 4
  • Sexo: Masculino
  • Programando hasta lo mas alto.
    • Ver Perfil
bbcode [code][/code]
« en: 09 de Noviembre de 2011, 15:44:50 pm »
Estoy haciendo un pequeño sistema de bbcodes y no se me ocurre niguna forma para hacer el bbcode [*code][*/code] ya que sí, se me hace la función para dejarlo con el estilo CSS pero si dentro del bbcode hay otro bbcode (por ejemplo el de negrita) sigue transformándose y haciendo el texto negrita en vez de dejarlo de esta manera:
Código: [Seleccionar]
Así [b]es como[/b] me gustaría mi [i]bbcode[/i]
¿Cómo puedo solucionar esta duda?

P.D: Los bbcodes los hago con "preg_replace()" de la siguiente forma:

Código: [Seleccionar]
$a = array(
      "/\[i\](.*?)\[\/i\]/is",
      "/\[b\](.*?)\[\/b\]/is",
      "/\[u\](.*?)\[\/u\]/is",
      "/\[img\](.*?)\[\/img\]/is",
      "/\[url=(.*?)\](.*?)\[\/url\]/is",
  "/\[quote\](.*?)\[\/quote\]/is",
  "/\[quote=(.*?)\](.*?)\[\/quote\]/is",
  "/\[right\](.*?)\[\/right\]/is",
  "/\[center\](.*?)\[\/center\]/is",
  "/\[small\](.*?)\[\/small\]/is",
  "/\[color=(.*?)\](.*?)\[\/color\]/is",
  "/\[code\](.*?)\[\/code\]/is",
 
   );
$b = array(
      "<i>$1</i>",
      "<b>$1</b>",
      "<u>$1</u>",
      "<a href='$1' id='lightbox'><img style='max-height:350px; max-weight:350px;' src='$1'></a>",
      "<a href='$1'>$2</a>",
  "<blockquote>$1</blockquote>",
  "<blockquote><strong style='font-size:10px;'>$1 escribi&oacute;:</strong><br>$2</blockquote>",
  "<div align='right'>$1</span>",
  "<div align='center'>$1</span>",
  "<small>$1</small>",
  "<span style='color:$1;'>$2</span>",
  "<code>$1</code>",

   );
$texto=preg_replace($a, $b, $texto);

Un saludo, Guille.

Comunidad PHPeros

bbcode [code][/code]
« en: 09 de Noviembre de 2011, 15:44:50 pm »

Desconectado -Pituko-

  • PHPero Experto
  • *****
  • Mensajes: 954
  • Karma: 20
  • Sexo: Masculino
  • ¡Hala Madrid!
    • Ver Perfil
Re:bbcode [code][/code]
« Respuesta #1 en: 09 de Noviembre de 2011, 20:53:53 pm »
Estoy haciendo un pequeño sistema de bbcodes y no se me ocurre niguna forma para hacer el bbcode [*code][*/code] ya que sí, se me hace la función para dejarlo con el estilo CSS pero si dentro del bbcode hay otro bbcode (por ejemplo el de negrita) sigue transformándose y haciendo el texto negrita en vez de dejarlo de esta manera:
Código: [Seleccionar]
Así [b]es como[/b] me gustaría mi [i]bbcode[/i]
¿Cómo puedo solucionar esta duda?

P.D: Los bbcodes los hago con "preg_replace()" de la siguiente forma:

Código: [Seleccionar]
$a = array(
      "/\[i\](.*?)\[\/i\]/is",
      "/\[b\](.*?)\[\/b\]/is",
      "/\[u\](.*?)\[\/u\]/is",
      "/\[img\](.*?)\[\/img\]/is",
      "/\[url=(.*?)\](.*?)\[\/url\]/is",
  "/\[quote\](.*?)\[\/quote\]/is",
  "/\[quote=(.*?)\](.*?)\[\/quote\]/is",
  "/\[right\](.*?)\[\/right\]/is",
  "/\[center\](.*?)\[\/center\]/is",
  "/\[small\](.*?)\[\/small\]/is",
  "/\[color=(.*?)\](.*?)\[\/color\]/is",
  "/\[code\](.*?)\[\/code\]/is",
 
   );
$b = array(
      "<i>$1</i>",
      "<b>$1</b>",
      "<u>$1</u>",
      "<a href='$1' id='lightbox'><img style='max-height:350px; max-weight:350px;' src='$1'></a>",
      "<a href='$1'>$2</a>",
  "<blockquote>$1</blockquote>",
  "<blockquote><strong style='font-size:10px;'>$1 escribi&oacute;:</strong><br>$2</blockquote>",
  "<div align='right'>$1</span>",
  "<div align='center'>$1</span>",
  "<small>$1</small>",
  "<span style='color:$1;'>$2</span>",
  "<code>$1</code>",

   );
$texto=preg_replace($a, $b, $texto);

Un saludo, Guille.
No es la mejor manera pero se me ocurre que puedes hacer que se detecte si hay [*code] en esa cadena y en caso de que si lo haya, con explode divides el texto basándote en la referencia de [*code] creando un array, ves si $array['1'] existe [*/code] y en caso de que sí vuelves a dividir con explode y a $array['0'] y a $array['2'] le aplicas el preg_replace() de los bbcodes normales y a $array['1'] le aplicas el preg_replace() del bbcode [*code]

Espero que me hayas entendido, perfeccionando un poco eso puedes solucionar los pequeños inconvenientes que trae pero si hay una alternativa con CSS, utilízala.

Desconectado nmartin021

  • PHPero Avanzado
  • ****
  • Mensajes: 250
  • Karma: 9
    • Ver Perfil
Re:bbcode [code][/code]
« Respuesta #2 en: 11 de Noviembre de 2011, 03:05:39 am »
En $a, donde la expresión regular de [code], pon:
Código: [Seleccionar]
/\[code\][^\[\/?.+\]]+\[\/code\]/
Prueba a ver si funciona, y me dices.

Saludos

Desconectado judoka

  • PHPero Avanzado
  • ****
  • Mensajes: 255
  • Karma: 4
  • Sexo: Masculino
  • Programando hasta lo mas alto.
    • Ver Perfil
Re:bbcode [code][/code]
« Respuesta #3 en: 13 de Noviembre de 2011, 01:01:29 am »
No funcionó... el texto de dentro del bbcode ([*code]) si que se muestra (pero formateado con el bbcode), pero luego se muestra el [*code][*/code]:
[*code]Hola[*/code]

Desconectado nmartin021

  • PHPero Avanzado
  • ****
  • Mensajes: 250
  • Karma: 9
    • Ver Perfil
Re:bbcode [code][/code]
« Respuesta #4 en: 18 de Noviembre de 2011, 09:51:37 am »
Entonces prueba así:

$text 
preg_replace(&#39;/\[code\](.+)\[code\]/Usie&#39;, &#39;highlight_string(\&#39;\\1\&#39;)&#39;, $text);

Usé el modificador e de PCRE, que significa "eval", por lo que el código que puse entre comillas -teoricamente- debería funcionar. Pruebalo y me dices.

Nota: es mejor ir poniendo $text = preg_replace('algo', 'algo', $text); que usar un array, ya que tienes más control: podías poner el preg_replace de [b][/b] después que el de [code][/code] y evitar complicaciones
« Última modificación: 18 de Noviembre de 2011, 09:53:59 am por nmartin021 »