Foros del Web » Programando para Internet » PHP »

BBCode a HTML

Estas en el tema de BBCode a HTML en el foro de PHP en Foros del Web. function.php Código PHP: function  BBcode ( $texto ){     $texto  =  htmlentities ( $texto );     $a  = array(        "/\[i\](.*?)\[\/i\]/is" ,        "/\[b\](.*?)\[\/b\]/is" ,        ...
  #1 (permalink)  
Antiguo 10/09/2010, 08:53
 
Fecha de Ingreso: septiembre-2009
Mensajes: 230
Antigüedad: 14 años, 6 meses
Puntos: 2
BBCode a HTML

function.php
Código PHP:
function BBcode($texto){
   
$texto htmlentities($texto);
   
$a = array(
      
"/\[i\](.*?)\[\/i\]/is",
      
"/\[b\](.*?)\[\/b\]/is",
      
"/\[u\](.*?)\[\/u\]/is",
      
"/\[img\](.*?)\[\/img\]/is",
      
"/\[url=(.*?)\](.*?)\[\/url\]/is",
      
"/\[quote=(.*?)\](.*?)\[\/quote\]/is"
   
);
   
$b = array(
      
"<i>$1</i>",
      
"<b>$1</b>",
      
"<u>$1</u>",
      
"<img src=\"$1\" />",
      
"<a href=\"$1\">$2</a>",
      
"Cita:<br/> <div class=\"quote\">Empezado por: <b>$1</b><br/> <i>$2</i></div>"
   
);
   
$texto preg_replace($a$b$texto);
      
$texto nl2br($texto);
   return 
$texto;

Lo que quiero, es invertirla... Necesito volcar el contenido que meto nuevamente en un textarea (sea para editar, para hacerle un quote, etc). Quiero que se entienda bien, no quiero que de BBCODE liste HTML, quiero que DE HTML tire a BBCODE, así luego éste se pueda utilizar en un textarea.
  #2 (permalink)  
Antiguo 10/09/2010, 08:58
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: BBCode a HTML

quizá el problema radica en que debes emplear dicha función solo al mostrar el texto en tus paginas, no al momento de guardarlo en BD, no al momento de recibirlo del formulario...

así de simple, dicho formato -como en este foro- se conserva, pues solo se interpreta al enviarlo al navegador...

ahora, invertir dicha función no es tan sencillo... y si has caído en esa necesidad segursamente es por lo que te he comentado ya...
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 10/09/2010, 09:11
 
Fecha de Ingreso: septiembre-2009
Mensajes: 230
Antigüedad: 14 años, 6 meses
Puntos: 2
Respuesta: BBCode a HTML

Cita:
Iniciado por pateketrueke Ver Mensaje
quizá el problema radica en que debes emplear dicha función solo al mostrar el texto en tus paginas, no al momento de guardarlo en BD, no al momento de recibirlo del formulario...

así de simple, dicho formato -como en este foro- se conserva, pues solo se interpreta al enviarlo al navegador...

ahora, invertir dicha función no es tan sencillo... y si has caído en esa necesidad segursamente es por lo que te he comentado ya...
Es verdad, no lo había pensado de ese modo! Muchas gracias, lo emplearé entonces.
  #4 (permalink)  
Antiguo 10/09/2010, 09:24
 
Fecha de Ingreso: septiembre-2009
Mensajes: 230
Antigüedad: 14 años, 6 meses
Puntos: 2
Respuesta: BBCode a HTML

Bien, me sirvió, solo que ahora tengo otro problema: Utilizo 2 funciones yo para parsear:

Código PHP:
function parse_links($str$len=25$mid='...'){
$left ceil(0.6666 $len);
$right $len $left;
preg_match_all('/(?<!=|\]|\/)((https?|ftps?|irc):\/\/|' '(www([0-9]{1,3})?|ftp)\.)([0-9a-z-]{1,25}' '[0-9a-z]{1}\.)([^\s&\[\{\}\]]+)/ims'$str$matches);
foreach(
$matches[0] as $key=>$value){
$temp $value;
if(
strlen($value) > ($len strlen($mid) + 2)){
$value substr($value0$left) . $mid substr($value,(-$right));
}
$temp = !preg_match('/:\/\//'$temp) ? (substr($temp03) === 'ftp' 'ftp://' $temp 'http://' $temp) : $temp;
$temp $temp === $matches[0][$key] && $value === $matches[0][$key] ? '' '=' $temp;
$str str_replace($matches[0][$key],'[url' $temp ']' $value '[/url]'$str);
}
$str preg_replace('/\[url=(?!http|ftp|irc)/ims''[url=http://'$str);
$str preg_replace('/\[url\](.+?)\[\/url\]/ims','<a href="$1">$1</a>',$str);
$str preg_replace('/\[url=(.+?)\](.+?)\[\/url\]/ims''<a href="$1">$2</a>'$str);
return 
$str;
}

function 
BBcode($texto){
   
$texto htmlentities($texto);
   
$a = array(
      
"/\[i\](.*?)\[\/i\]/is",
      
"/\[b\](.*?)\[\/b\]/is",
      
"/\[u\](.*?)\[\/u\]/is",
      
"/\[img\](.*?)\[\/img\]/is",
      
"/\[url=(.*?)\](.*?)\[\/url\]/is",
      
"/\[quote=(.*?)\](.*?)\[\/quote\]/is"
   
);
   
$b = array(
      
"<i>$1</i>",
      
"<b>$1</b>",
      
"<u>$1</u>",
      
"<img src=\"$1\" />",
      
"<a href=\"$1\">$2</a>",
      
"Cita:<br/> <div class=\"quote\">Empezado por: <b>$1</b><br/> <i>$2</i></div>"
   
);
   
$texto preg_replace($a$b$texto);
      
$texto nl2br($texto);
   return 
$texto;

Una por más que no pongas [ url= X] X [ /url ] y pongas www.X.com te lo parsea igual, entones para utilizar las 2 lo qeu hago es lo siguiente:

Código PHP:
//Parseamos el comentario para que tome las URLS
$comments    =    parse_links($comentario['comentario']);
$comment    =    BBcode($comments); 
me devuelve:

Código HTML:
Pruebaperuab

<a href="http://www.hotmail.com">www.hotmail.com</a>

[b]asdasdasd[/b]
Que es lo que exactamente había puesto... lo ultimo en negrita y el link, pero me tendría que devolver el link sin listar el codigo html, alguna sugerencia?

Edit: había que pasar primero por BBCode y después por el parse_link, ya que bbcode te saca htmlentities... Listo el pancho! :P

Etiquetas: bbcode, html
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 05:05.