Remplacer URL par LIEN cliquable via REGEX

Remplacer URL par LIEN cliquable via REGEX - PHP - Programmation

Marsh Posté le 12-10-2010 à 15:02:21    

Bonjour,
 
Ça fait désespérément 3 jours que je cherche comment faire pour remplacer une URL d'une chaîne en lien cliquable avec une fonction PHP.
 
Je m'explique...
 
Une chaine $texte contient "un exemple de phrase avec un premier lien http://www.google.fr/ et un deuxième lien mais cette fois-ci sur YouTube : http://www.youtube.com/watch?v=dN9_R8YW4nU". Ceci est la phrase d'exemple contenu dans la chaine $texte.
 
J'aimerais grâce à je pense aux regex pouvoir remplacer les URL de texte en URL cliquable par exemple comme ceci...
 

Code :
  1. <a href="http://www.google.fr/" style="style_du_lien" title="http://www.google.fr/" target="_blank">http://www.google.fr/</a>
Code :
  1. <a href="javascript:fonction_speciale_youtube('http://www.youtube.com/watch?v=dN9_R8YW4nU');" style="style_du_lien" title="http://www.youtube.com/watch?v=dN9_R8YW4nU" target="_blank">http://www.youtube.com/watch?v=dN9_R8YW4nU</a>


J'aimerais donc que cette fonction reconnaisse les liens Youtube des autres liens.
 
Je vous remercie de votre aide!
 
--
Amicalement,
Maxence

Reply

Marsh Posté le 12-10-2010 à 15:02:21   

Reply

Marsh Posté le 13-10-2010 à 11:28:37    

Code :
  1. <?php
  2. $phrase="un exemple de phrase avec un premier lien http://www.google.fr/ et un deuxième lien mais cette fois-ci sur YouTube : http://www.youtube.com/watch?v=dd
  3. N9_R8YW4nU";
  4. echo "$phrase<br>";
  5. $phrase=preg_replace('#http(s?)://www.google([?=/A-Za-z0-9%._-]+)#','<a style="style_du_lien" target="_blank" href="http\1://www.google\2" title="http\1://www.google\2">http\1://www.google\2</a>',$phrase);
  6. $phrase=preg_replace('#http(s?)://www.youtube([?=/A-Za-z0-9%._-]+)#','<a style="style_du_lien" target="_blank" href="javascript:fonction_speciale_youtube(\'http\1://www.youtube\2\');" title="http\1://www.youtube\2">http\1://www.youtube\2</a>',$phrase);
  7. echo $phrase;
  8. ?>


 
Voilà qui devrait fonctionne si j'ai bien compris ton problème.


Message édité par roondar le 13-10-2010 à 11:28:59
Reply

Marsh Posté le 13-10-2010 à 12:49:35    

C'est exactement ce qu'il me faut sauf que la première REGEX avec Google doit être prise pour une URL générale et non pas seulement pour Google...
 
Merci à toi !
 
Amicalement,
Maxence

Reply

Marsh Posté le 13-10-2010 à 13:29:33    

Code :
  1. <?php
  2. $phrase="un exemple de phrase avec un premier lien https://www.google.fr/ et un deuxième lien mais cette fois-ci sur YouTube : http://www.youtube.com/watch?v==
  3. dN9_R8YW4nU";
  4. echo "$phrase<br>";
  5. $phrase=preg_replace('#http(s?)://(?!www.youtube)([&?=/A-Za-z0-9%._-]+)#','<a style="style_du_lien" target="_blank" href="http\1://\2" title="\2">\2</a>',$phrase);
  6. echo "$phrase<br>";
  7. $phrase=preg_replace('#http(s?)://www.youtube([&?=/A-Za-z0-9%._-]+)#','<a style="style_du_lien" target="_blank" href="javascript:fonction_speciale_youtube(\'http\1://www.youtube\2\');" title="http\1://www.youtube\2">http\1://www.youtube\2</a>',$phrase);
  8. echo $phrase;
  9. ?>


Message édité par roondar le 13-10-2010 à 13:31:38
Reply

Marsh Posté le 13-10-2010 à 14:04:12    

Merci beaucoup!!
 
Amicalement,
Maxence

Reply

Marsh Posté le 13-10-2010 à 14:49:29    

pirmax2 a écrit :

Merci beaucoup!!
 
Amicalement,
Maxence


 
De rien :p

Reply

Marsh Posté le 13-10-2010 à 16:21:57    

attention au fait que le point est un caractère spécial et mériterait d'être échappé.
De plus, ca semble inutilement complexe de faire deux groupes indépendants pour le s et le complément d'adresse alors que rien n'empêcherait de faire un seul groupe sur toute l'expression, n'est-ce pas ?


---------------
last.fm
Reply

Marsh Posté le 13-10-2010 à 16:32:40    

Oui mais un groupe doit être fait pour les URLs générales, et un autre groupe spéciale YouTube pour appliquer une classe de style différent!
 
Amicalement,
Maxence

Reply

Marsh Posté le 13-10-2010 à 16:34:29    

theshockwave a écrit :

attention au fait que le point est un caractère spécial et mériterait d'être échappé.
De plus, ca semble inutilement complexe de faire deux groupes indépendants pour le s et le complément d'adresse alors que rien n'empêcherait de faire un seul groupe sur toute l'expression, n'est-ce pas ?


Perso, je ne vois pas comment faire cela en une seule expression et je vois pas l'intérêt d'échapper le point de (www.youtube).


Message édité par roondar le 13-10-2010 à 16:35:13
Reply

Marsh Posté le 13-10-2010 à 16:52:10    

l'intérêt d'échapper le point, c'est juste pour de la propreté et éviter qu'un petit malin tente de détourner ton traitement en faisant un http://wwwoyoutube.fipzjbhgsdf.com/ J'aurais même tendance du coup à recommander d'aller jusqu'au / suivant pour ce même genre de raison.
 
Pour la 'autre point, c'était surtout pour la deuxième expression, seulement, juste pour une question d'élégance. Ca devrait donner ca, si je ne m'abuse :

Code :
  1. 7.$phrase=preg_replace('(#https?://www.youtube[&?=/A-Za-z0-9%._-]+)#','<a style="style_du_lien" target="_blank" href="javascript:fonction_speciale_youtube(\'\1\');" title="\1">\1</a>',$phrase);


 
Après, effectivement, ce n'est pas crucial.
Pour ce qui est de la première expression, j'imagine qu'il sera difficile d'y couper. Je ne connais pas les extensions de regexp spécifiques à PHP pour savoir si les groupes peuvent englovber d'autres groupes ou non, et si le négation sur www.youtube pourrait se faire hors d'un groupe.


---------------
last.fm
Reply

Marsh Posté le 13-10-2010 à 16:52:10   

Reply

Marsh Posté le 13-10-2010 à 17:01:38    

theshockwave a écrit :

Pour ce qui est de la première expression, j'imagine qu'il sera difficile d'y couper. Je ne connais pas les extensions de regexp spécifiques à PHP pour savoir si les groupes peuvent englovber d'autres groupes ou non, et si le négation sur www.youtube pourrait se faire hors d'un groupe.


Je suis même pas sûr que tu puisses avec une regex tout court !  :??:

Reply

Marsh Posté le 13-10-2010 à 17:43:40    

roondar a écrit :


Je suis même pas sûr que tu puisses avec une regex tout court !  :??:


avec une regexp standard, c'est sur que c'est pas possible  [:petrus75] c'est pour cfa que je précise que je ne connais pas les extensions et que je n'ai pas de solution à proposer pour ce cas là


---------------
last.fm
Reply

Marsh Posté le 14-10-2010 à 15:02:04    

et un truc comme ca ?

 
Code :
  1. $str = "un exemple de phrase avec un premier lien http://www.google.fr/ et un deuxième lien
  2. mais cette fois-ci sur YouTube : http://www.youtube.com/watch?v=dN9_R8YW4nU";
  3.    
  4. $pattern = array('/https?:\/\/(?!www\.youtube\.com)\S+/', '/https?:\/\/www\.youtube\.com\S+/');
  5. $replace = array('<a href="$0" title="$0">$0</a>', '<a href="javascript:fonction_speciale_youtube(\'$0\')" title="$0">$0</a>');
  6.    
  7. echo preg_replace($pattern, $replace, $str);


Message édité par stealth35 le 14-10-2010 à 15:02:16
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed