Extraire le nom du lien d'une url

Extraire le nom du lien d'une url - PHP - Programmation

Marsh Posté le 03-04-2004 à 22:37:46    

Sh@rdar a écrit :

function replink($Texte) {
  $Texte = strip_tags($Texte);
  $Texte = nl2br($Texte);
  $Texte = eregi_replace("(http|https|ftp)://([[:alnum:]/\n+-=%&:_.~?]+[#[:alnum:]+]*)","<a href=\"\\1://\\2\" target=\"_blank\">\\1://\\2</a>",$Texte);
  $Texte = eregi_replace("(([a-z0-9_]|\\-|\\.)+@([^[:spa
ce:]]*)([[:alnum:]-])\.([^[:space:]]*)([[:alnum:]
-]))", "<a href=\"mailto:\\1\">\\1</a>", $Texte);
  $Texte = eregi_replace("([a-z0-9]{40})", "\\1 " ,$Texte) ;
  return $Texte ;
}
 
 
tout en un celle là !  

Bonjour !
J'utilise donc cette fonction, au passage, merci Sh@rdar ;)
 
Mais je voudrai en faire une qui fasse tout l'inverse.
C'est a dire qu'elle convertisse <a href= "http://www.toto.com">www.toto.com</a> en www.toto.com  
 
J'ai fait donc ce bou de script :

Code :
  1. $Texte = eregi_replace("<a href=\"(http|https|ftp)://([[:alnum:]/\n+-=%&:_.~?]+[#[:alnum:]+]*)\" target=\"_blank\">([[:alnum:]/\n+-=%&:_.~?]+[#[:alnum:]+]*)</a>","\\2",$Texte);


 
Il marche tres bien ......... mais il ne récupere seulement le code du genre : <a href="http://www.toto.com" target="_blank">toto</a>
 :(  
 
Dans ce cas cela retournera : http://www.toto.com
 
Si quelqu'un pouvais me dire comment faire pour que la fonction ne tienne pas compte des différents parametres passer a la balise <a>.
Parce que la, le code fonctionne que si le parametre target="_blank" est présent ...
Merci...!  
 :hello:


---------------
Licence Professionnelle Multimedia Internet Webmaster | Des articles, des aides, des scripts .... le tout disponible sur mon site.
Reply

Marsh Posté le 03-04-2004 à 22:37:46   

Reply

Marsh Posté le 04-04-2004 à 11:30:21    

On ne peut pas faire une expression régulière qui recherche ?à partir de la fin? ? À ce moment, tu n'aurais plus qu'à gérer ?...>  </a>?. Je me souviens d'un truc de ce genre en shell.

Reply

Marsh Posté le 04-04-2004 à 15:21:26    

Je sais pas si j'ai bien compris.
 
Sur :
<a href="http://www.toto.com" target="_blank">toto</a>
Ce qui est souligné est optionnel, c'est ça ?
 
Si oui utilise une parenthèse non capturante, suivi de ? :
(?: target=\"_blank\" )?


Message édité par kalex le 04-04-2004 à 15:24:26
Reply

Marsh Posté le 06-04-2004 à 01:12:20    

En fait on peut dire optionnel, mais c'est juste qu'avec la fonction que j'ai faite, s'il n'y a pas target="_blank", il ne m'extrait pas le nom du lien.
 
J'ai pas très bien compris ton histoire de parenthese non capturante....


---------------
Licence Professionnelle Multimedia Internet Webmaster | Des articles, des aides, des scripts .... le tout disponible sur mon site.
Reply

Marsh Posté le 06-04-2004 à 01:34:38    

Pour juste faire ça, on peut faire plus simple.

Code :
  1. $Texte = preg_replace('#<a +href *= *"(.*?)"(:? *target *= *"_blank" )? *>.*?</a *>#i', '\\1', $Texte);


Message édité par kalex le 06-04-2004 à 01:35:41
Reply

Marsh Posté le 06-04-2004 à 01:56:19    

j0k3r_n0ir a écrit :


J'ai pas très bien compris ton histoire de parenthese non capturante....


 
c'est la le problème .... :/ enfin si tu veux pondre une regex il faut que tu apprennes la syntaxe regex ... c'est un langage dans le langage ..... il va inévitablement falloir faire des efforts  [:spamafote]  
 
http://www.phpfrance.com/tutorials/index.php?id=22
http://cyberzoide.developpez.com/php4/regex/


---------------
from here and there -- \o__________________________________ -- la révolution de la terre, en silence
Reply

Marsh Posté le 06-04-2004 à 01:59:10    

simogeo a écrit :

il va inévitablement falloir faire des efforts  [:spamafote]

Non, parce que ce que j'ai codé marche très bien. :o

Reply

Marsh Posté le 06-04-2004 à 02:02:14    

kalex a écrit :

Non, parce que ce que j'ai codé marche très bien. :o


me suis arrêté au post de j0k3r_n0ir  :o  
 
ce ue tu as fait marche peut-être très bien, ca ne l'empeche pas forcement de comprendre ce qui'l se passe  ;)


---------------
from here and there -- \o__________________________________ -- la révolution de la terre, en silence
Reply

Marsh Posté le 06-04-2004 à 02:13:21    

Reply

Marsh Posté le 06-04-2004 à 02:25:48    

uhu
Merci je savais pas que le regex était une sorte de language !
 
Je vais plancher un peu dessus.
Et voir surtout si ce que m'a donné kalex fonctionne ;)


---------------
Licence Professionnelle Multimedia Internet Webmaster | Des articles, des aides, des scripts .... le tout disponible sur mon site.
Reply

Marsh Posté le 06-04-2004 à 02:25:48   

Reply

Marsh Posté le 08-04-2004 à 14:11:33    

Bon je viens de tester ces deux solutions :

Code :
  1. $Texte = strip_tags($Texte,'<br><a');
  2. $Texte = eregi_replace("<a [^>]+>([^<]+)<\/a>","\\1",$Texte


 
Et elle marche nikel toutes les deux.;)
 
En passant, quelle fonction est la plus rapide niveau execution....
T'en qu'a faire optimiser la chose  :D


Message édité par j0k3r_n0ir le 08-04-2004 à 14:11:49

---------------
Licence Professionnelle Multimedia Internet Webmaster | Des articles, des aides, des scripts .... le tout disponible sur mon site.
Reply

Marsh Posté le 08-04-2004 à 14:38:24    

a mon avis et de loin .. strip_tags()


---------------
from here and there -- \o__________________________________ -- la révolution de la terre, en silence
Reply

Marsh Posté le 08-04-2004 à 14:43:08    

Merci !
Je pensais aussi mais rien ne vaut l'avis des autres !
 
Merci pour tous les gars !!! :jap:


---------------
Licence Professionnelle Multimedia Internet Webmaster | Des articles, des aides, des scripts .... le tout disponible sur mon site.
Reply

Sujets relatifs:

Leave a Replay

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