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

  FORUM HardWare.fr
  Programmation
  PHP

  faire des liens à partir d'une url > dernier pb avec ereg :(

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

faire des liens à partir d'une url > dernier pb avec ereg :(

n°323403
mober
Mécréant Notoire
Posté le 05-03-2003 à 12:57:00  profilanswer
 

g un texte ($string pour faire dans l'originalité) et je veux que les urls qui s'y trouvent soient automatiquement "linkées" (<a href..></a> ).
 
je suis pas loin du but, l'un des principaux problèmes que j'ai rencontré étant que le texte devait être rééditable et qu'il fallait donc que le script détecte si le lien était déjà fait.
 
Comme expression régulière pour deteter les urls j'utilise un truc de mon cru "http://[^ ><\n\r]*" (en pariant un peu sur l'intelligence des utilisateurs).
 
ça donne le truc suivant :
 

Code :
  1. ereg ("http://[^ ><\n\r]*",$string,$regs);
  2. $urls=split('[ ]',$regs[0]);
  3. //pcq à un moment gt arrivé à avoir une liste des urls séparées par un espace mais c plus le cas actuellement et c justement mon problème.
  4. $i=0;
  5. while (isset($urls[$i])) {
  6. $url=$urls[$i];
  7. if (!(ereg ("<a href=?$url",$string))) {
  8. $string=ereg_replace("$url","<a href=$url target=blank>$url</a>",$string);
  9. }
  10. $i++;
  11. }


 
Ca marche plutôt bien sauf que ereg ("http://[^ ><\n\r]*",$string,$regs); ne me sort que la première url correspondant à l'expression et pas la liste de toutes les urls de $string (pourtant il me semblait que ereg sortait toutes les occurrences trouvées.) :??:
 
Une idée :??:


Message édité par mober le 05-03-2003 à 13:13:54
mood
Publicité
Posté le 05-03-2003 à 12:57:00  profilanswer
 

n°323439
arghbis
salops de dauphins
Posté le 05-03-2003 à 13:42:07  profilanswer
 

ben $string est un tableau non?? donc en le parcourant tu devrait trouver toutes les occurences non???

n°323483
mober
Mécréant Notoire
Posté le 05-03-2003 à 14:10:07  profilanswer
 

arghbis a écrit :

ben $string est un tableau non?? donc en le parcourant tu devrait trouver toutes les occurences non???


 
$string est un texte, le tableau c $regs.
En $reg[0] j'ai normalement la liste de toutes les occurrences trouvées. :(

n°323489
mober
Mécréant Notoire
Posté le 05-03-2003 à 14:14:08  profilanswer
 

je viens d'essayer avec une expression positive (type "http://[a-zA-Z...]) et le résultat est le même, y'a vraiment un truc que je maitrise pas :(

n°323518
arghbis
salops de dauphins
Posté le 05-03-2003 à 14:46:51  profilanswer
 

nononononnon! $regs[0] ne contient que la chaine en entier! as-tu regardé la suite ($regs[1] etc...)??
 
et pis faudrait penser à mettre les "parenthèses capturantes" aussi (cf doc de php.net!)
 
ereg ("http://([^ ><\n\r]*)",$string,$regs);
 
sinon, ton script ne me parait pas bon, mias je ne vois pas pq au premier coup d'oeuil (et j'ai pas vraiment le temps de cghercher, désolé!!)
 
--edit--
Ps: même si je m'étais trompé de nom de variable, avec $string, c quand même un tableau : si tu fais print $string[0], ça te print la première lettre de la chaine.  :whistle:


Message édité par arghbis le 05-03-2003 à 14:48:00
n°323543
mober
Mécréant Notoire
Posté le 05-03-2003 à 15:13:46  profilanswer
 

oui g regardé la suite des $regs et la solution n'est pas ( g une seule occurence de l'url trouvée dans l'un des 10 $regs[i]> bizarrement toujours celui que j'affiche en dernier :??:)
 
et pis $regs[0] contient toute les occurences trouvées d'après les manuels online.
 
Je pense pas avoir besoin de parenthèses capturantes mais g essayé quand même ce que tu proposais et ça change rien (d'ailleurs j'avais déjà testé (http://[^ ><\n\r]*) avant de poster).
 
:(

n°323549
arghbis
salops de dauphins
Posté le 05-03-2003 à 15:17:39  profilanswer
 

non, le manuel online dit que regs[0] contient une copie de la chaine de caractères à parser!
 
pq tu splite en fonction de [] ???? c ton spérateur de chaine??

n°323579
mober
Mécréant Notoire
Posté le 05-03-2003 à 15:41:58  profilanswer
 

arghbis a écrit :

non, le manuel online dit que regs[0] contient une copie de la chaine de caractères à parser!
 
pq tu splite en fonction de [] ???? c ton spérateur de chaine??


 
oui c ce que je mets en commentaire, à un monent g eu la chaine des occurences en regs[0] avec un espace comme séparateur mais je sais plus comment j'avais fait :cry:

n°323581
arghbis
salops de dauphins
Posté le 05-03-2003 à 15:43:25  profilanswer
 

attends, si tu sais que ton séparateur de chaine est [], pq tu fais pas un explode?? c bcp plus simple!

n°323625
mober
Mécréant Notoire
Posté le 05-03-2003 à 16:21:58  profilanswer
 

arghbis a écrit :

attends, si tu sais que ton séparateur de chaine est [], pq tu fais pas un explode?? c bcp plus simple!


 
t'as raison je pourrai faire $urls=explode(" ",$regs[0]); lorsque j'aurai de nouveau la liste complète des urls (nb le séparateur est un espace " "=[ ])
 
Mais en attendant g plus la liste complète des urls(seulemnt la première qui apparait dans le texte).


Message édité par mober le 05-03-2003 à 16:22:33
mood
Publicité
Posté le 05-03-2003 à 16:21:58  profilanswer
 

n°323633
arghbis
salops de dauphins
Posté le 05-03-2003 à 16:24:54  profilanswer
 

note pour plus tard, il me semble bien que le séparateur "espace" se note  "\s" (enfin, en regexp classique c comme ça, donc faut vérifier).

n°323692
mober
Mécréant Notoire
Posté le 05-03-2003 à 17:04:43  profilanswer
 

Ouais je peux même faire un str_replace au lieu du ereg_replace, ça c carrément plus économique.
 
bon c bien tout ça mais ça règle pas mon pb :)

n°323707
arghbis
salops de dauphins
Posté le 05-03-2003 à 17:23:01  profilanswer
 

heu attends là, tu fais quoi de ta variable $string après le ereg_replace??? non paske tel que c là, elle est effacée àchaque tour!!
 
ayé!! je crois que je sais pq ça marche poas!!!
essaie de faire un print $regs[0][0], puis $regs[0][1]
 
si ça ne marche pas, utilise preg_match_all à la place de ereg.

n°323829
mober
Mécréant Notoire
Posté le 05-03-2003 à 18:22:16  profilanswer
 

arghbis a écrit :

heu attends là, tu fais quoi de ta variable $string après le ereg_replace??? non paske tel que c là, elle est effacée àchaque tour!!
 
ayé!! je crois que je sais pq ça marche poas!!!
essaie de faire un print $regs[0][0], puis $regs[0][1]
 
si ça ne marche pas, utilise preg_match_all à la place de ereg.


 
ben en tout cas merci pour tes réponses.
je regarderai cela demain.


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

  faire des liens à partir d'une url > dernier pb avec ereg :(

 

Sujets relatifs
[ Modem ] comment composer a partir d'un .batEnlever le surlignage des liens
Besoin de vous - tester site... (ancien nav à partir d'IE4 needed)Aller chercehr une image sur le net, à partir d'un prog en JAVA
reconstituer un fichier à partir de son contenu ascii ?Construire un DATETIME a partir d'une date et d'une heure
Comment tester le dernier caractère d'un fichier (suite de hier) [CSS] 2 Couleurs de liens dans 2 div
Zipper des fichiers à partir de VB ?PHP : ereg
Plus de sujets relatifs à : faire des liens à partir d'une url > dernier pb avec ereg :(


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