php-logo

Volviendo un poco a los codigo de programacion, les dejo una util funcion en PHP para parsear URL o Links que vengan de un texto plano.

Ideal para tus sistemas de comentarios o blogs que estes creando.

Consta de una funcion llamada parse_links. Que contiene 3 parametros: el texto a parsear, el largo maximo de la URL y los caracteres que “acortaran” el Link si tiene mas caracteres de los permitidos.

Codigo

<?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" title="$1">$1</a>',$str);
$str = preg_replace('/\[url=(.+?)\](.+?)\[\/url\]/ims', '<a href="$1" title="$1">$2</a>', $str);
return
$str;
}
?>

Ejemplos

La funcion parse_links la puedes usar como en los siguientes ejemplos:

<?php
echo parse_links('http://www.site.com');
// <a href="http://www.site.com">http://www.site.com</a&gt;

echo parse_links('www.cropp.in');
// <a href="http://www.cropp.in">www.cropp.in</a>

echo parse_links('ftp://somesite.com');
// <a href="ftp://somesite.com">ftp://somesite.com</a>

echo parse_links('[url]www.cropp.in[/url]');
// <a href="http://www.cropp.in">www.cropp.in</a>

echo parse_links('[url=www.cropp.in]Cropp.in[/url]');
// <a href="http://www.cropp.in">Cropp.in</a>

echo parse_links( 'http://www.somesite.com/with/a/really/long/url/link' );
// <a href="http://www.somesite.com/with/a/really/long/url/link"> http://www.some...url/link</a>
?>

Fuente: http://snippets.bigtoach.com/