fonction php de détection de liens ?


Fab le Fou
WRInaute passionné
WRInaute passionné
 
Messages: 1511
Inscription: 2 Déc 2004

fonction php de détection de liens ?

Message le Mer Jan 11, 2006 14:37

Bonjour,

Je cherche une fonction php qui détecte les liens dans les textes que je lui fournis et les rend actif.

C'est-à-dire que si dans le texte il y a un -http://www.example.com ou un -moi@monfai.com, elle les détecte et les encadre des balises qu'il faut pour qu'ils soiient cliquables (en protégeant si possible les e-mails).

Bref, rien de bien méchant, mais comme ça existe déjà, inutile de réinventer la roue. 8)

fab

bozoleclown
WRInaute impliqué
WRInaute impliqué
 
Messages: 893
Inscription: 24 Nov 2005

Message le Mer Jan 11, 2006 14:42

J'ai pas un nom de site particulier en tete

mais si tu cherches sur google
pour preg_match+regex+php

tu trouveras surement la regex qu'il te faut pour catcher tes urls dans ton texte

http://www.google.fr/search?q=preg_matc ... ch&start=0

--
Bozo


mr_go
WRInaute passionné
WRInaute passionné
 
Messages: 1945
Inscription: 21 Sep 2005

Message le Mer Jan 11, 2006 16:13

Ca doit être un truc comme ca :

eregi_replace("http://www.example.com","<a href='URL'>\\1</a>","TON TEXTE");


spout
WRInaute accro
WRInaute accro
 
Messages: 4110
Inscription: 14 Mai 2003

Message le Mer Jan 11, 2006 17:21

Code: Tout sélectionner
<?php
// Function converts plain-text email addresses and URLs to hyber links
function autoLink($str, $max = 1000) {

   // URL - http/https/ftp - larger than $max
   $pattern[0] = "/(?<!=\"|=)(http|https|ftp):\/\/([\S]{".$max."})([\S]{0,})/";
   $replace[0] = '<a href="$1://$2$3" title="$1://$2$3">$1://$2 ...</a>&nbsp;&nbsp;<a href="$1://$2$3" title="'.NAV_OPEN_NEW_WINDOW.': $1://$2$3" onclick="javascript:window.open(this.href);return false;"><img src="'.ABSOLUTE_URL.'images/new-window.gif" alt="Open in new window" /></a>';
   
   // URL - http/https/ftp - smaller than $max
   $pattern[1] = "/(?<!=\"|=|>)(http|https|ftp):\/\/([^\s]*)/";
   $replace[1] = '<a href="$1://$2">$1://$2</a>&nbsp;&nbsp;<a href="$1://$2" title="'.NAV_OPEN_NEW_WINDOW.': $1://$2" onclick="javascript:window.open(this.href);return false;"><img src="'.ABSOLUTE_URL.'images/new-window.gif" alt="Open in new window" /></a>';
   
   // URL - www - larger than $max
   $pattern[2] = "/(?<!=\"|=|http:\/\/)\b(w){3}\.([\S]{".$max."})([\S]{0,})\b/";
   $replace[2] = '<a href="http://www.$2$3" title="http://www.$2$3">www.$2...</a>&nbsp;&nbsp;<a href="http://www.$2$3" title="'.NAV_OPEN_NEW_WINDOW.': http://www.$2$3" onclick="javascript:window.open(this.href);return false;"><img src="'.ABSOLUTE_URL.'images/new-window.gif" alt="Open in new window" /></a>';
   
   // URL - www - smaller than $max
   $pattern[3] = "/(?<!=\"|=|http:\/\/|\">|>)\b(w){3}\.([^\s]*)\b/";
   $replace[3] = '<a href="http://www.$2">www.$2</a>&nbsp;&nbsp;<a href="http://www.$2" title="'.NAV_OPEN_NEW_WINDOW.': http://www.$2" onclick="javascript:window.open(this.href);return false;"><img src="'.ABSOLUTE_URL.'images/new-window.gif" alt="Open in new window" /></a>';
   
   // Email
   $pattern[4] = "/([A-Za-z0-9\+\-_]+)@([A-Za-z0-9-_]+)\.([A-Za-z]{2,4})([,.]?)/";
   $replace[4] = '<a href="mailto:$1@$2.$3">$1@$2.$3</a>$4';
   
   $str = preg_replace($pattern, $replace, $str);
   
   return $str;
}

?>


et si tu veux encoder les emails en Javascript, petite fonction en +:
Code: Tout sélectionner
function encodeEmail($email, $name = null) {

   $email = preg_replace("/\"/","\\\"",$email);

    if($name == null)
           $name = $email;

   $old = "document.write('<a href=\"mailto:$email\">$name</a>')";

   $output = "";

   for ($i=0; $i < strlen($old); $i++) {
    $output = $output . '%' . bin2hex(substr($old,$i,1));
    }

   $output = '<script type="text/javascript">eval(unescape(\''.$output.'\'))</script>';
   $output .= '<noscript><div>'.TXT_NEED_JAVASCRIPT_TO_VIEW_EMAIL.'</div></noscript>';
   return $output;
}


La fonction autoLink deviens donc:
Code: Tout sélectionner
// Function converts plain-text email addresses and URLs to hyber links
function autoLink($str, $max = 1000) {

   // URL - http/https/ftp - larger than $max
   $pattern[0] = "/(?<!=\"|=)(http|https|ftp):\/\/([\S]{".$max."})([\S]{0,})/";
   $replace[0] = '<a href="$1://$2$3" title="$1://$2$3">$1://$2 ...</a>&nbsp;&nbsp;<a href="$1://$2$3" title="'.NAV_OPEN_NEW_WINDOW.': $1://$2$3" onclick="javascript:window.open(this.href);return false;"><img src="'.ABSOLUTE_URL.'images/new-window.gif" alt="Open in new window" /></a>';
   
   // URL - http/https/ftp - smaller than $max
   $pattern[1] = "/(?<!=\"|=|>)(http|https|ftp):\/\/([^\s]*)/";
   $replace[1] = '<a href="$1://$2">$1://$2</a>&nbsp;&nbsp;<a href="$1://$2" title="'.NAV_OPEN_NEW_WINDOW.': $1://$2" onclick="javascript:window.open(this.href);return false;"><img src="'.ABSOLUTE_URL.'images/new-window.gif" alt="Open in new window" /></a>';
   
   // URL - www - larger than $max
   $pattern[2] = "/(?<!=\"|=|http:\/\/)\b(w){3}\.([\S]{".$max."})([\S]{0,})\b/";
   $replace[2] = '<a href="http://www.$2$3" title="http://www.$2$3">www.$2...</a>&nbsp;&nbsp;<a href="http://www.$2$3" title="'.NAV_OPEN_NEW_WINDOW.': http://www.$2$3" onclick="javascript:window.open(this.href);return false;"><img src="'.ABSOLUTE_URL.'images/new-window.gif" alt="Open in new window" /></a>';
   
   // URL - www - smaller than $max
   $pattern[3] = "/(?<!=\"|=|http:\/\/|\">|>)\b(w){3}\.([^\s]*)\b/";
   $replace[3] = '<a href="http://www.$2">www.$2</a>&nbsp;&nbsp;<a href="http://www.$2" title="'.NAV_OPEN_NEW_WINDOW.': http://www.$2" onclick="javascript:window.open(this.href);return false;"><img src="'.ABSOLUTE_URL.'images/new-window.gif" alt="Open in new window" /></a>';
   
   $str = preg_replace($pattern, $replace, $str);
   
   $emailPattern = "/([A-Za-z0-9\+\-_]+)@([A-Za-z0-9-_]+)\.([A-Za-z]{2,4})([,.]?)/";
   
   return preg_replace_callback(
      $emailPattern,
      create_function('$matches','return encodeEmail($matches[0]);'),
      $str);
}


Fab le Fou
WRInaute passionné
WRInaute passionné
 
Messages: 1511
Inscription: 2 Déc 2004

Message le Mer Jan 11, 2006 18:05

Ok super, je vais tester la fonction de ce pas !
ça a l'air très complet, merci !

Fabrice


Si vous avez aimé cette discussion, partagez-la sur vos réseaux sociaux préférés :

Lectures recommandées sur ce thème :

Consultez la description détaillée des produits ou services de Google suivants : Google Related Links

  • Partenaires pour échanger des liens
    Cet outil vous liste quelques sites qui font des liens vers des sites similaires au vôtre, pour vous aider à trouver des partenaires pour des échanges de liens.
  • Détection de pages dupliquées
    Cet outil vous permet de calculer la similarité entre 2 pages web. L'algorithme utilisé repose sur l'analyse des occurrences des mots (mais pas sur leur positionnement dans les pages). Google utilise cette notion à certains endroits dans son algorithme, mais de façon bien plus évoluée que ce petit outil... Avoir des pages trop similaires peut entraîner des problèmes d'indexation... Cet outil vous permettra peut-être de résoudre certains problèmes de contenus dupliqués.
  • Calcul du taux de backlinks vers pages internes
    Cet outil vous permet de calculer le taux de liens profonds vers un site web. Un lien profond est un lien qui ne pointe pas vers la page d'accueil mais au contraire vers une page interne du site. Les sites dont l'essentiel du référencement vient de leurs inscriptions dans des annuaires ont un taux de liens profonds faible ; à l'inverse, les sites de référence ont souvent un taux de liens profonds plus important, signe que leur contenu a suscité de nombreux liens spontanés.
  • Calcul du nombre de backlinks
    Cet outil vous permet d'analyser en détails la "popularité" de votre site sur Google. En plus du nombre de liens pris en compte par Google, il calcule le pourcentage de liens internes parmi tous les liens, et il affiche les premières URL trouvées.


Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités