Szövegben url-ek linkké alakítása automatikusan php-vel

Szokás fórumokon, vendégkönyvekben a beírt url-eket automatikusan felismertetni és átalakítani kattintható linkké. Erre jól használhatók a reguláris kifejezések. Az első példa rövid, de felismeri a linkeket, amik http-vel, https-el, www-el, wap-al kezdődnek. Viszont ha vessző kerül a végére, mert épp egy tagmondat végén van, vagy pont, esetleg felkiáltó jel, akkor az is bekerül a linkbe.

<?php
$szoveg = "Egy szövegben lehet link https-el kezdődve: https://www.google.com/accounts/ServiceLogin?service=mail
vagy csak http-vel. http://rimelek.hu,
 www.phpstudio.hu "
;

$szoveg = preg_replace("#(\s*)((http(s?)://)|(www\.|wap\.))(\S+\.\S+)#is", "\\1<a href=\"http\\4://\\5\\6\" target='_blank'>\\2\\6</a>", $szoveg);
print $szoveg;
?>

A másik megoldás bonyolultabb, de az írásjeles hibát is megoldja:

<?php
function url2link($matches)
{
        $i = strlen($matches[0]);
        $szoveg = trim($matches[0],',.!');
        $j = strlen($szoveg);
        return preg_replace("#(\s*)(http(s?)://)?(.*)#is",
                "\\1<a href=\"http\\3://\\4\" target='_blank'>\\2\\4</a>",
                $szoveg).substr($matches[0],$i-1,$i-$j);
}

$szoveg = preg_replace_callback("#(\s*)((http(s?)://)|(www\.|wap\.))(\S+\.\S+)#is",'url2link',$szoveg);
print $szoveg;
?>

Kategóriák: 
Megosztás/Mentés