PHP Expression régulière : rendre clickable toutes les url d'un texte

Règles du forum
Attention ce forum est destiné avant tout à ceux qui découvrent le référencement. Les membres qui auront l'amabilité de répondre à leurs questions sont priés de rester courtois, polis, indulgents, patients et pédagogues... Merci d'avance !

Par ailleurs, inutile d'utiliser ce forum uniquement pour obtenir des liens vers vos sites, les liens sont désactivés pour le référencement (nofollow).

Consultez la formation au REFERENCEMENT naturel Google de WebRankInfo / Ranking Metrics

jackmick777
Nouveau WRInaute
Nouveau WRInaute
 
Messages: 10
Inscription: 29 Juin 2009

PHP Expression régulière : rendre clickable toutes les url d'un texte

Message le Mer Fév 16, 2011 16:37

Bonjour,

je souhaiterais remplacer toutes les url non balisé d'un texte par des url cliquable <a href=""> sauf les url d'images qui sont dans une balise src=""

Le code ci dessous fonctionne très bien sauf qu'il me remplace également les url des images. Comment modifier mon expression régulière de manière à excluse les urls images qui sont dans une balise src="" ?

function replace_url_in_text ($text){
$in = array('`((?:https?|ftp)://\S+[[:alnum:]]/?)`si');
$out = array('<a href="$1">$1</a>');
return preg_replace($in, $out, $text);
}

$texte = 'Ceci est un exemple http://www.domainaremplacer.com et <img src="http://domain.com/exemple/test.jpg" />';
echo replace_url_in_text($texte);

Résultat :
----------

Ceci est un exemple <a href="http://www.domainaremplacer.com">http://www.domainaremplacer.com</a> et <img src="<a href="http://domain.com/exemple/test.jpg">http://domain.com/exemple/test.jpg</a>" />

Quelqu'un pourrait m'aider ?

merci


seebz
WRInaute impliqué
WRInaute impliqué
 
Messages: 808
Inscription: 15 Avr 2007

Re: PHP Expression régulière : rendre clickable toutes les url d'un texte

Message le Mer Fév 16, 2011 18:53

Ma fonction autolink() devrait t’intéresser.
Je viens de la mettre à jour pour répondre à ton besoin ;)

jackmick777
Nouveau WRInaute
Nouveau WRInaute
 
Messages: 10
Inscription: 29 Juin 2009

Re: PHP Expression régulière : rendre clickable toutes les url d'un texte

Message le Mer Fév 16, 2011 19:11

Ah super, merci infiniment.

Ce qu'un homme sème il le récoltera ! Merci pour cette semence.

ps : Serait-il possible de modifier encore un peut la fonction pour qu'elle traite également les url sans les http:// mais avec les www sous la forme www.domain.tdl ?


seebz
WRInaute impliqué
WRInaute impliqué
 
Messages: 808
Inscription: 15 Avr 2007

Re: PHP Expression régulière : rendre clickable toutes les url d'un texte

Message le Mer Fév 16, 2011 19:23

A première vue, cette modif devrait faire l'affaire, mais elle va faire n'importe quoi si elle rencontre une url du genre xxx.www.example.com :

Code: Tout sélectionner
function autolink($str, $attributes=array()) {
   $attrs = '';
   foreach ($attributes as $attribute => $value) {
      $attrs .= " {$attribute}=\"{$value}\"";
   }

   $str = ' ' . $str;
   $str = preg_replace(
      '`([^"=\'>])((http|https|ftp)://[^\s<]+[^\s<\.)])`i',
      '$1<a href="$2"'.$attrs.'>$2</a>',
      $str
   );
   $str = preg_replace(
      '`([^"=\'>\/])(www\.[^\s<]+[^\s<\.)])`i',
      '$1<a href="http://$2"'.$attrs.'>$2</a>',
      $str
   );
   $str = substr($str, 1);
   
   return $str;
}


edit: en fait, ca va faire n'imp' avec une url qui contiendra "www." qui ne soit pas précédé de "/" (ex : example.com/xxx.www.html).
Perso, je ne l'utiliserai pas :roll:

jackmick777
Nouveau WRInaute
Nouveau WRInaute
 
Messages: 10
Inscription: 29 Juin 2009

Re: PHP Expression régulière : rendre clickable toutes les url d'un texte

Message le Mer Fév 16, 2011 19:46

merci

jackmick777
Nouveau WRInaute
Nouveau WRInaute
 
Messages: 10
Inscription: 29 Juin 2009

Re: PHP Expression régulière : rendre clickable toutes les url d'un texte

Message le Mer Fév 16, 2011 19:58

Ce qui serait intéressant c'est de faire une expression régulière comme webrank info le fait, elle pourrait être exécuter avant autolink() et elle aurait pour objectif d'ajouter "http://" devant toutes les urls du texte qui commence par "www." et qui ne serait pas dans des balises html.

Seriez vous en mesure de le faire ?

jackmick777
Nouveau WRInaute
Nouveau WRInaute
 
Messages: 10
Inscription: 29 Juin 2009

Re: PHP Expression régulière : rendre clickable toutes les url d'un texte

Message le Mer Fév 16, 2011 20:55

seebz a écrit:A première vue, cette modif devrait faire l'affaire, mais elle va faire n'importe quoi si elle rencontre une url du genre xxx.www.example.com :

Code: Tout sélectionner
function autolink($str, $attributes=array()) {
   $attrs = '';
   foreach ($attributes as $attribute => $value) {
      $attrs .= " {$attribute}=\"{$value}\"";
   }

   $str = ' ' . $str;
   $str = preg_replace(
      '`([^"=\'>])((http|https|ftp)://[^\s<]+[^\s<\.)])`i',
      '$1<a href="$2"'.$attrs.'>$2</a>',
      $str
   );
   $str = preg_replace(
      '`([^"=\'>\/])(www\.[^\s<]+[^\s<\.)])`i',
      '$1<a href="http://$2"'.$attrs.'>$2</a>',
      $str
   );
   $str = substr($str, 1);
   
   return $str;
}


edit: en fait, ca va faire n'imp' avec une url qui contiendra "www." qui ne soit pas précédé de "/" (ex : example.com/xxx.www.html).
Perso, je ne l'utiliserai pas :roll:


J'ai rajouté une ligne à votre code et ca semble régler le problème :

Code: Tout sélectionner
$text  = ' ' . $text;
      $text  = preg_replace ('`([ ,;:!\|\.\?\\n])(www\.[^\s<]+[^\s<\.)])`i', '$1http://$2', $text);// replace www.domain.tdl => http://www.domain.tdl
      $text  = preg_replace('`([^"=\'>])((http|https|ftp)://[^\s<]+[^\s<\.)])`i', '$1<a href="$2"'.$attrs.'>$2</a>', $text);
      $str   = substr($text, 1);


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

Formation recommandée sur ce thème :

Formation REFERENCEMENT 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 :



Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité