Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
658 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  Remplacer URL par LIEN cliquable via REGEX

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Remplacer URL par LIEN cliquable via REGEX

n°2028619
pirmax2
Posté le 12-10-2010 à 15:02:21  profilanswer
 

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

mood
Publicité
Posté le 12-10-2010 à 15:02:21  profilanswer
 

n°2028874
roondar
Posté le 13-10-2010 à 11:28:37  profilanswer
 

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
n°2028904
pirmax2
Posté le 13-10-2010 à 12:49:35  profilanswer
 

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

n°2028911
roondar
Posté le 13-10-2010 à 13:29:33  profilanswer
 

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
n°2028918
pirmax2
Posté le 13-10-2010 à 14:04:12  profilanswer
 

Merci beaucoup!!
 
Amicalement,
Maxence

n°2028942
roondar
Posté le 13-10-2010 à 14:49:29  profilanswer
 

pirmax2 a écrit :

Merci beaucoup!!
 
Amicalement,
Maxence


 
De rien :p

n°2028982
theshockwa​ve
I work at a firm named Koslow
Posté le 13-10-2010 à 16:21:57  profilanswer
 

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
n°2028994
pirmax2
Posté le 13-10-2010 à 16:32:40  profilanswer
 

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

n°2028998
roondar
Posté le 13-10-2010 à 16:34:29  profilanswer
 

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
n°2029009
theshockwa​ve
I work at a firm named Koslow
Posté le 13-10-2010 à 16:52:10  profilanswer
 

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
mood
Publicité
Posté le 13-10-2010 à 16:52:10  profilanswer
 

n°2029014
roondar
Posté le 13-10-2010 à 17:01:38  profilanswer
 

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 !  :??:

n°2029041
theshockwa​ve
I work at a firm named Koslow
Posté le 13-10-2010 à 17:43:40  profilanswer
 

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
n°2029284
stealth35
Posté le 14-10-2010 à 15:02:04  profilanswer
 

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

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  Remplacer URL par LIEN cliquable via REGEX

 

Sujets relatifs
Comment rendre visible une image cachée au survol d'un lien ?Interdire hotlinking d'image & URL Directe
[Regex] Détecter des nombres entre crochetscomment faire un lien interne en CSS?
lien vers maps avec arrivé prérempliAide sur une REGEX C# svp
Détection automatique lien externe >> frameCapturer avec une REGEX
[URL Rewriting] Empêcher les URL bidonsCouleur d'un lien qui change quand clic
Plus de sujets relatifs à : Remplacer URL par LIEN cliquable via REGEX


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR