faire des liens à partir d'une url > dernier pb avec ereg :( - PHP - Programmation
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???
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.
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
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.
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).
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??
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! |
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
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!
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).
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).
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
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.
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!! |
ben en tout cas merci pour tes réponses.
je regarderai cela demain.
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 :
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