Foros del Web » Programando para Internet » PHP »

Ayuda con BBCode

Estas en el tema de Ayuda con BBCode en el foro de PHP en Foros del Web. Hola a todos: Hace un tiempo atrás comentaba por aquí que estaba realizando un Foro de Discusión, para probarme y ver si de verás aprendía ...
  #1 (permalink)  
Antiguo 20/08/2004, 09:37
Avatar de Reynier  
Fecha de Ingreso: noviembre-2002
Ubicación: Por ahí en algún sitio
Mensajes: 1.844
Antigüedad: 21 años, 4 meses
Puntos: 1
Ayuda con BBCode

Hola a todos:
Hace un tiempo atrás comentaba por aquí que estaba realizando un Foro de Discusión, para probarme y ver si de verás aprendía PHP. Pues bien creo que la idea ya va a un 45% de ejecución. La cosa es que necesito ayuda de alguien que haya hecho algo antes con BBCode pues en realidad si entran al Foro y ven el mensaje que hay puesto en la sección "oticias Generales y Administración" se darán cuenta que hay BBCode sin formatear y que necesito dar formato, porque sino el Foro no sería atractivo. La dirección del mismo es http://reynierpm.variosweb.com. Este es el código que he realizado yo mismo (no soy experto ni mucho menos) y no se si sea el más eficiente o el correcto:
Código PHP:
function BBCodeParser($text){
  
$bbcode str_replace("[b]""<strong>",$text);
  
$bbcode str_replace("[/b]""</strong>",$bbcode);
  
$bbcode str_replace("[u]""<u>",$bbcode);
  
$bbcode str_replace("[/u]""</u>",$bbcode);
  
$bbcode str_replace("[i]""<i>",$bbcode);
  
$bbcode str_replace("[/i]""</i>",$bbcode);
  
$bbcode str_replace("[align=center]""<div align='center'>",$bbcode);
  
$bbcode str_replace("[/center]""</div>",$bbcode);
  
$bbcode str_replace("[align=left]""<div align='left'>",$bbcode);
  
$bbcode str_replace("[/left]""</div>",$bbcode);
  
$bbcode str_replace("[align=right]""<div align='right'>",$bbcode);
  
$bbcode str_replace("[/right]""</div>",$bbcode);
  
$bbcode str_replace("[align=justify]""<div align='justify'>",$bbcode);
  
$bbcode str_replace("[/justify]""</div>",$bbcode);
  
$bbcode str_replace("[cita]""\n<fieldset><legend class='citacolor'>Cita:</legend><div class='quote'>",$bbcode);
  
$bbcode str_replace("[/cita]""</div></fieldset>",$bbcode);
  
$bbcode str_replace("[codigo]""\n<fieldset><legend class='codecolor'>Código:</legend><div class='code'>",$bbcode);
  
$bbcode str_replace("[/codigo]""</div></fieldset>",$bbcode);
  return 
$bbcode;
 }

 function 
ParserPHP($text){
  
preg_match_all("/(\[)(php)(])(.*)(\[\/php\])/iU"$text$l);
  for(
$i=0$icount($l[0]); $i++){
   
$bbcode str_replace($l[0][$i],PHPFormat($l[4][$i]),$text);
  }
  return 
$bbcode;
 }

 function 
PHPFormat($php) {
  
$php str_replace("<br>","\n",$php);
  
ob_start();
  
highlight_string($php);
  
$cfinal ob_get_contents();
  
ob_end_clean();
  
$keycol ini_get("highlight.keyword");
  
$manual "http://www.php.net/manual-lookup.php?lang=es&amp;pattern=";
  
$cfinal preg_replace('{([\w_]+)(\s*</font>)'.
                         
'(\s*<font\s+color="'.$keycol.'">\s*\()}m',
                         
'<a href="'.$manual.'$1" title="Ayuda en [url]www.php.net[/url] sobre $1" target="_blank">$1</a>$2$3',
                          
$cfinal);
  return 
"\n<fieldset><legend class='phpcolor'>Código PHP:</legend><div class='php'>".$cfinal."</div></fieldset>";
 }

 function 
SmilieParser($text){
  
$bbcode str_replace(":smilie01:","<img src='images/smilies/smile033.gif' alt='Smile 01' align='absmiddle' border='0' class='cursor'>"$text);
  
$bbcode str_replace(":smilie02:","<img src='images/smilies/smile032.gif' alt='Smile 02' align='absmiddle' border='0' class='cursor'>"$bbcode);
  
// asi para las demas smilies
  
return $bbcode;
 } 
ahora el formato de BBCode lo pueden probar ustedes mismos en el Foro para que vean como funciona. La llamada a estas funciones es la siguiente:
Código PHP:
$unformmated SmilieParser(BBCodeParser(($fetch['text']))); 
la de PHP la he probado pero solo me funciona con lineas horizontales, o sea, si el texto en la BD es así:
Cita:
<?php function PEPE($var1,$var2){ echo $var1; echo $var2; } ?>
me lo formatea, pero si es así:
Cita:
<?php
function PEPE($var1,$var2){
echo $var1;
echo $var2;
}
?>
no hace nada incluso no me escribe entonces el mensaje. Ayuda !!! que esto me vuelve loco y no doy con lo errores.

Salu2 y gracias ante todo
__________________
Ing. Reynier Pérez Mira
  #2 (permalink)  
Antiguo 20/08/2004, 12:22
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Por mi parte no domino las expresiones regulares (algo habrá que cambiar para que funcione con saltos de línea ..)

pero, .. si dices que si queda todo en una línea te funciona .. quita el salto de línea (\n) aplicando un str_replace() y lo dejas por '' (nada) ... Eso sería el primer paso .. de ahí aplicas tu función que ya usas.

Un saludo,
  #3 (permalink)  
Antiguo 20/08/2004, 12:49
Avatar de Webstudio
Colaborador
 
Fecha de Ingreso: noviembre-2001
Ubicación: 127.0.0.1
Mensajes: 3.499
Antigüedad: 22 años, 5 meses
Puntos: 69
http://ar.php.net/manual/es/pcre.pattern.modifiers.php

Cita:
s (PCRE_DOTALL)

Si se define éste modificador, un meta-caracter de punto en el patrón coincidirá con todos los caracteres, incluyendo el de nueva línea. Sin él, los saltos de línea son excluídos. Este modificador es equivalente a /s en Perl. Una clase negativa como [^a] siempre coincide con un caracter de nueva línea, independientemente del uso de este modificador.
__________________
Tutoriales Photoshop | Web-Studio.com.ar
Artículos PHP | ZonaPHP.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




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