Quels caractères rendent une URL invalide ?

Quels caractères rendent une URL invalide ?

S'agit-il d'URL valides ?

  • exemple.com/file[/].html
  • http://example.com/file[/].html

En général, les URI définis par la [RFC 3986] (http://tools.ietf.org/html/rfc3986/) (voir [Section 2 : Caractères] (http://tools.ietf.org/html/rfc3986#section-2)) peuvent contenir l'un des 84 caractères suivants :

ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~:/?#[]@!$&'()*+,;=

Notez que cette liste ne précise pas où ces caractères peuvent apparaître dans l'URI.

Tout autre caractère doit être codé avec le codage en pourcentage (%hh). Chaque partie de l'URI a des restrictions supplémentaires concernant les caractères qui doivent être représentés par un mot codé en pourcentage.

Commentaires (25)

Tous les caractères valides qui peuvent être utilisés dans un URI (une [URL][1] est un type d'[URI][2]) sont définis dans la [RFC 3986][3].

Tous les autres caractères peuvent être utilisés dans une URL à condition qu'ils soient d'abord "encodés en URL". Cela implique de remplacer le caractère non valide par des "codes" spécifiques (généralement sous la forme du symbole du pourcentage (%) suivi d'un nombre hexadécimal).

Ce lien, [HTML URL Encoding Reference][4], contient une liste des codages des caractères non valides.

[1] : http://en.wikipedia.org/wiki/Uniform_Resource_Locator [2] : http://en.wikipedia.org/wiki/Uniform_Resource_Identifier [3] : https://tools.ietf.org/html/rfc3986 [4] : http://www.w3schools.com/tags/ref_urlencode.asp

Commentaires (1)

Ce n'est pas vraiment une réponse à votre question, mais la validation des url est un sérieux problème. Il est probablement préférable de valider le nom de domaine et de ne pas toucher à la partie requête de l'URL. C'est mon expérience. Vous pourriez aussi faire un "ping" de l'url et voir si la réponse est valide, mais c'est peut-être trop pour une tâche aussi simple.

Les expressions régulières pour détecter les url sont nombreuses, allez sur Google :)

Commentaires (2)