Php - Extraire un lien d'une chaîne de caractères

Le Code PHP :
<?php

function get_link($str){

$str=strip_tags($str);

$nlk = explode(' ', $str);

foreach($nlk as $element){

if(eregi('http://', $element))return $element;

}

return false;

}

?>

Explications :

En fait, nous allons partir du constat que les liens débutent par http:// , et que, dans notre langue du moins (si vous en connaissez où ce n'est pas le cas dîtes le moi, ça m'instruira  ^), les mots sont séparés par des espaces.

Nous allons donc faire un explode sur les espaces, via :

$nlk = explode(' ', $str);

Cela nous retournera un tableau ($nlk), dont les entrées correspondent à tous les mots.

Ensuite, nous allons parcourir ce tableau avec une simple boucle foreach

foreach($nlk as $element){

Pour chaque $element (et donc, mot), nous allons vérifier si $element contient notre fameux http://

if(eregi('http://', $element))return $element;

 

Si jamais l'expression ne contient pas de lien, on retourne false :

return false;

 

Utilisation :

$lien = get_link("Visitez le site http://gregoire-penverne.fr");

Cela vous retournera http://gregoire-penverne.fr ^^

 

Extrapolons un peu ...

Cette fonction me sert tous les jours, plusieurs dizaines de fois par jour même. Quand je poste une actualité sur mon site, j'en extrais le lien et utilise la fonction fournie par ilik.it afin de le raccourcir ^

Après, libre à vous d'utiliser bit.ly pout raccourcir, ou faire ce que vous voulez avec votre superbe fonction get_link ...

 

Edit du 25/11/2010 :
Pour obtenir un tableau contenant les liens d'une chaine en utilisant preg_replace, on ferait :
<?php

function extract_links($str){

$str=preg_replace("/(\r\n|\n|\r)/", " ", $str);

$pattern = "!http://(.*) !Ui";

preg_match_all($pattern, $str, $out);

$lk=array();

foreach($out[0] as $lk_array){

$lk[] = $lk_array;

}

return $lk;

}

?>
Gpenverne

Gpenverne

Dév back, symfonien, adore bidouiller des machins pour faire des bidules, sans se poser la question de leur utilité...

Read More