Ver Mensaje Individual
  #4 (permalink)  
Antiguo 10/09/2010, 09:24
kirst
 
Fecha de Ingreso: septiembre-2009
Mensajes: 230
Antigüedad: 14 años, 7 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