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($value, 0, $left) . $mid . substr($value,(-1 * $right));
}
$temp = !preg_match('/:\/\//', $temp) ? (substr($temp, 0, 3) === '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