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

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

Marsh Posté le 05-03-2003 à 12:57:00    

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
Reply

Marsh Posté le 05-03-2003 à 12:57:00   

Reply

Marsh Posté le 05-03-2003 à 13:42:07    

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

Reply

Marsh Posté le 05-03-2003 à 14:10:07    

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. :(

Reply

Marsh Posté le 05-03-2003 à 14:14:08    

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 :(

Reply

Marsh Posté le 05-03-2003 à 14:46:51    

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
Reply

Marsh Posté le 05-03-2003 à 15:13:46    

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).
 
:(

Reply

Marsh Posté le 05-03-2003 à 15:17:39    

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

Reply

Marsh Posté le 05-03-2003 à 15:41:58    

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:

Reply

Marsh Posté le 05-03-2003 à 15:43:25    

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

Reply

Marsh Posté le 05-03-2003 à 16:21:58    

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
Reply

Marsh Posté le 05-03-2003 à 16:21:58   

Reply

Marsh Posté le 05-03-2003 à 16:24:54    

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).

Reply

Marsh Posté le 05-03-2003 à 17:04:43    

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 :)

Reply

Marsh Posté le 05-03-2003 à 17:23:01    

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.

Reply

Marsh Posté le 05-03-2003 à 18:22:16    

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.

Reply

Sujets relatifs:

Leave a Replay

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