fonction php de détection de liens ?

Consultez la formation au référencement naturel Google de WebRankInfo / Ranking Metrics


Fab le Fou
WRInaute accro
WRInaute accro
 
Messages: 1511
Inscription: Jeu Déc 02, 2004 15:20

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 passionné
WRInaute passionné
 
Messages: 893
Inscription: Jeu Nov 24, 2005 19:08

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 accro
WRInaute accro
 
Messages: 1945
Inscription: Mer Sep 21, 2005 16:02

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: 1306
Inscription: Mer Mai 14, 2003 11:05

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 accro
WRInaute accro
 
Messages: 1511
Inscription: Jeu Déc 02, 2004 15:20

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


Formation recommandée sur ce thème :

Formation Référencement naturel Google : apprenez une méthode efficace pour optimiser à fond le référencement naturel dans Google de façon durable... Formation animée par Olivier Duffez et Fabien Facériès, experts en référencement naturel.

Tous les détails sur le site Ranking Metrics : programme, prix, dates et lieux, inscription en ligne.

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.
  • 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.
  • Transformer des citations en liens
    Cet outil vous permet de trouver des pages citant votre site mais ne faisant pas (encore) de lien. Il suffira parfois d'un simple mail pour transformer cette simple citation en lien (backlink).


Qui est en ligne

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