Bonjour
Je cherche une portion de code permettant de vérifier une url..
Merci
Bonne soirée
Bonjour
Je cherche une portion de code permettant de vérifier une url..
Merci
Bonne soirée
Pour quel usage souhait tu vérifier une url ... ? soit plus clair dans ton explication.
euh ben c'est dans un formulaire, pour pas que les adresses qu'on m'envoie soit des fausses urls...
Salut
Il me semble que la norme SMTP inclut une méthode pour deander à un sereur mail si une adresse précise existe, cependant je ne suis pas convaincu que tous les serveurs l'implémentent. On m'en a parlé une fois, je n'ai jamais vérifié.
Ce serait la meilleure solution pour toi mais, vu que ce n'est pas fiable, tu devras probablement passer par des expressions régulières.
Je pnse que le mieux serait de te documenter dessus, c'est toujours très intéressant de se pencher là-dessus et, en outre, je suis persuadé que quelqu'un l'a déjà fait sur développez.com et que tu trouveras facilement ton bonheur.
Slt
J'ai essayé de me mettre aux expressions régulieres et j'ai fait quelque chose, pouvez-vous me dire si c'est correct svp ?
Donc en fait, ce qu'on veut vérifier dans une url, c'est que ca commence bien par http:// donc on a ^http://
Ensuite, on peut avoir n'importe quels caracteres (lettres,chiffres) donc on a [a-zA-Z]
Et pour finir, il faut qu'il soit du type .extension donc j'ai mis : [(.fr)|(.com)|(.net)|(.org)|(.biz)|(.info)|(.be)]$
Ce qui donne au final :
Qu'est-ce que je pourrais changer pour l'améliorer ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part ^http://[a-zA-Z][(.fr)|(.com)|(.net)|(.org)|(.biz)|(.info)|(.be)]$
Merci
++
bonjour,
vérification s'il y a http:// au début puis au moins un caractère, puis un '.' puis de nouveau au moins un caractère et enfin un '.fr' ou '.com' ou '.net' ou bien '.org'.
Code : Sélectionner tout - Visualiser dans une fenêtre à part ^http://([_a-zA-Z0-9])+(\.[_a-zA-Z0-9])+(\.fr)|(\.com)|(\.org)|(\.net)"
ah oki c'était totalement faux alr..
Mais euh ca sert a quoi le _ devant a-zA-Z0-9 ??
Et le \. ?
Merci
++
a-zA-Z0-9
Indique les caractères autoriés. ici cesont toutes les lettre de a à z, A à Z, et les chiffres de 0 à 9.
Donc pas d'accent par exemple !
Le _ devant, c'est juste pour ajouter _ à la liste des caractères autorisés.
Pour le \.
En fait le . tout seul, dansune regexp, represente tout les carateres (c'estun joker), seulement la on ne veut que le caratere . pour faire cela on l'echappe avec \
Donc la séquence \. ne représente qu'un caractère le point.
Par contre
^http://([_a-zA-Z0-9])+(\.[_a-zA-Z0-9])+(\.fr)|(\.com)|(\.org)|(\.net)"
ne fonctionne pas avec
http://www.ece.vt.edu/network/dns-format.html par exemple.
^http://([_a-zA-Z0-9]+(\.)){*}+(\.fr)|(\.com)|(\.org)|(\.net)"
Je serait tenté de faire quelque chose comme cela.
Mais c'est peut être pas bon :s
oki oki merci c'est plus clair
J'ai un petit probleme pour la suite, en fait j'aimerais vérifier que le nom de domaine existe réellement, donc j'ai fait ce code mais ca marche pas pourquoi ?
Merci
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36 <?php $url = 'http://<a href="http://www.developpez.net';" target="_blank">www.developpez.net';</a> $r = '^http://([_a-zA-Z0-9])+(\.[_a-zA-Z0-9])+(\.fr)|(\.com)|(\.org)|(\.net)|(\.info)|(\.biz)|(\.be)'; if(eregi($r,$url)) // Si l'url correspond bien a quelque chose du type http:// puis caractere puis point puis caractere puis extensions (.com etc) { /* On récupère le nom de domaine */ if(eregi('^http://www.',$url)) // Si l'url est avec le www { list($http, $domaine) = split ("www.", $url, 2); // On coupe en deux après le www pour avoir le domaine } else { list($http, $domaine) = split ("http://", $url, 2); // Sinon on coupe en deux après le http:// } if(checkdnsrr($domaine, "MX")) { return 1; // valide echo' domaine ok'; } else { return 0; // non valide echo'domaine non valide'; } echo'ok'; } else { return 0; // non valide echo'non'; } ?>
++
Pourquoi tu teste sur le MX ? c'est pas pour les mails sa ?checkdnsrr($domaine, "MX")
Non, il a bien recours à une fonction réseau souvent utilisée pour vérifier si le nom de domaine d'un email existe bien. MX étant le type par défaut ...
Par contre, attention, cette fonction vérifie si un nom de domaine est enregistré sur les DNS mais ne vérifie pas si le site lié existe ou pas.
Il faut alors faire attention à l'usage de cette fonction.
Si c'est pour vérifier si une page existe ou pas, je te conseille d'y rajouter une requete par socket sur l'adresse et tu vérifies le header ( page 404 ... ).
essaie qqch comme ça si tu as CURL installé.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 function checkUrl($url) { $c = curl_init($url); curl_setopt($c, CURLOPT_RETURNTRANSFER, 1); curl_setopt($c, CURLOPT_NOBODY, 1); curl_setopt($c, CURLOPT_FOLLOWLOCATION, 1); curl_setopt($c, CURLOPT_MAXREDIRS, 3); curl_setopt($c, CURLOPT_CONNECTTIMEOUT, 10); curl_setopt($c, CURLOPT_TIMEOUT, 10); curl_setopt($c, CURLOPT_HEADER, 1); curl_setopt($c, CURLOPT_USERAGENT, 'PHP'); $page = curl_exec($c); $info = curl_getinfo($c); curl_close($c); return array($page, $info); } list($page, $info) = checkUrl('tonurl'); echo $info['http_code'];
c bon mais ca ne permet ni les sous domaines ni le https ni le tiret (-) qui est un caractère autorizéEnvoyé par italiasky
Salut
Pour le https et les tirets (j'ajoute les chiffres au passage) :
AMHA, c'est une perte de temps de vérifier des URLs classiques. Pour une adresse e-mail, j'aurais compris mais pour une URL HTTP...
Code : Sélectionner tout - Visualiser dans une fenêtre à part ^(http)|(https)://[a-zA-Z0-9-][(.fr)|(.com)|(.net)|(.org)|(.biz)|(.info)|(.be)]$
Il y a plusieurs problèmes inhérents à cette méthode de vérifier les URLs au moment de l'envoi par l'utilisateur :
- il est possible qu'il envoie une URL valide mais qui ne correspond pas à ton masque
- il est possible que le serveur hébergeant l'URL ne réponde pas, précisément au moment où tu fais ton test
- etc.
Chez moi, en local, ca ne marche pas mais sur le net oui.
Ca renvoie le message en fait, 200 l'adresse est bonne, sinon elle n'existe pas c'est ca ?
C'est mieux d'utiliser ca ou plutot la fonction checkdnsrr ??
Merci
++
Envoyé par marcha
Salut
Bon, si tu veux ajouter les sous-domaines, utilise cette expression :
Je persiste dans mon idée comme quoi c'est une mauvaise idée de valider les URLs avant de les enregistrer : quel mal y aurait-il à avoir une URL foireuse ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part ^(http)|(https)://[a-zA-Z0-9.-][(.fr)|(.com)|(.net)|(.org)|(.biz)|(.info)|(.be)]$
oki merci bien pour votre aide..
Je vais utiliser la fonction checkUrl de marcha, c'est pas mal du tout et au moins il n'y a pa de problemes d'extensions ou sous domaines, ca marche avec tout et ca renvoie le code http, il suffit juste de le traiter après
Merci
++
Je compte sur toi pour publier tes améliorations :-)
oui j'aimerais bien, il y a pas de problemes mais ou exactement publié ca ?
Partager