189 votes

Caractères sûrs pour une url conviviale

J'ai besoin de faire un site web qui aura des articles, et je voudrais faire des urls conviviales pour lui, par exemple :

Titre : Test d'article

devrait devenir http://www.example.com/articles/article_test

Bien sûr, je dois supprimer certains caractères du titre, comme ? ou #, mais je ne sais pas lesquels.

Quelqu'un peut-il me dire quels personnages peuvent être conservés en toute sécurité ?

Merci !

237voto

Skip Head Points 4062

Pour citer la section 2.3 de RFC 3986 :

"Les caractères qui sont autorisés dans une URI mais qui n'ont pas de but sont appelés non réservés. Ils comprennent les lettres majuscules et minuscules les chiffres décimaux, le trait d'union, le point, le trait de soulignement et le tilde."

Notez que la RFC 3986 énumère moins de signes de ponctuation réservés que l'ancienne norme RFC 2396 .

120voto

Gary.Ray Points 4042

Il existe deux types de personnages dont vous devez vous méfier : les personnages réservés et les personnages dangereux.

Les caractères réservés sont : l'esperluette ("&") le dollar ("$") le signe plus ("+") la virgule (",") la barre oblique ("/") les deux-points (" :") le point-virgule (" ;") le signe égal ("=") le point d'interrogation (" ?") le symbole 'At' ("@") et le dièse ("#").

Les caractères généralement considérés comme non sûrs sont : l'espace, le point d'interrogation (" ?"), moins que et plus que ("<>"), les crochets ouverts et fermés ("[]") les accolades ouvertes et fermées ("{}") le pipe ("|") la barre oblique inversée ("\") la caret ("^") le tilde ("~") et le pourcentage ("%"). Il se peut que j'en aie oublié un ou plusieurs, ce qui m'amène à me faire l'écho de la réponse de Carl V. À long terme, il est probablement préférable d'utiliser une "liste blanche" de caractères autorisés et de coder ensuite la chaîne de caractères plutôt que d'essayer de se tenir au courant des caractères qui ne sont pas autorisés par les serveurs et les systèmes.

43voto

carl Points 25879

Il est préférable de ne conserver que certains caractères (liste blanche) plutôt que de supprimer certains caractères (liste noire).

Techniquement, vous pouvez autoriser n'importe quel caractère, à condition de le coder correctement. Mais, pour répondre à l'esprit de la question, vous ne devriez autoriser que ces caractères :

  1. Lettres minuscules (convertir les majuscules en minuscules)
  2. Numéros, de 0 à 9
  3. Un tiret - ou un trait de soulignement _
  4. Tilda ~

Tout le reste a une signification potentiellement spéciale. Par exemple, vous pouvez penser que vous pouvez utiliser +, mais il peut être remplacé par un espace. & est également dangereux, surtout si vous utilisez certaines règles de réécriture.

Comme pour les autres commentaires, consultez les normes et les spécifications pour obtenir tous les détails.

12voto

chaos Points 69029

D'après le contexte que vous décrivez, je soupçonne que ce que vous essayez en fait de faire est quelque chose appelé "slug SEO". La meilleure pratique connue pour cela est la suivante :

  1. Convertir en minuscules
  2. Convertir des séquences entières de caractères autres que a-z et 0-9 en un tiret (-) (pas de caractères de soulignement)
  3. Supprimez les "mots d'arrêt" de l'URL, c'est-à-dire les mots qui ne sont pas indexables de manière significative, tels que "a", "an" et "the" ; recherchez des listes complètes de "mots d'arrêt" sur Google.

Ainsi, à titre d'exemple, un article intitulé "L'utilisation de !@%$* pour représenter les jurons dans les bandes dessinées" obtiendrait un slug de "usage-represent-swearing-comics".

11voto

LKK Points 51

sans réserve = ALPHA / DIGIT / "-" / "." / "_" / "~"

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X