J'ai besoin de créer un site Web qui contiendra des articles, et j'aimerais lui créer des URL conviviales, par exemple l'URL de la page avec
Titre: Article Test
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 suis pas sûr de ceux à supprimer.
Quelqu'un peut-il me dire quels personnages peuvent être conservés en toute sécurité?
url
friendly-url
Paulo
la source
la source
Réponses:
Pour citer la section 2.3 de la RFC 3986 :
"Les caractères autorisés dans un URI mais n'ayant pas de fonction réservée sont appelés non réservés. Il s'agit notamment des lettres majuscules et minuscules, des chiffres décimaux, des tirets, des points, des traits de soulignement et du tilde."
Notez que la RFC 3986 répertorie moins de signes de ponctuation réservés que l'ancienne RFC 2396 .
la source
ç
etõ
?post-title-with-%C3%A7-and-%C3%B5
, mais elle s'affichera toujours dans la barre de localisation de l'utilisateur sous la formepost-title-with-ç-and-õ
.Il y a deux ensembles de caractères auxquels vous devez faire attention: réservé et dangereux .
Les caractères réservés sont:
Les caractères généralement considérés comme dangereux sont:
J'en ai peut-être oublié un ou plusieurs, ce qui m'amène à faire écho à la réponse de Carl V. À long terme, vous feriez probablement mieux d'utiliser une «liste blanche» de caractères autorisés, puis d'encoder la chaîne plutôt que d'essayer de vous tenir au courant des caractères qui ne sont pas autorisés par les serveurs et les systèmes.
la source
#
est un caractère réservé utilisé pour les signets sur une page spécifique, créé en ayant un élément HTML avec un attribut de nom ou d'id correspondant (sans#
-symbole).~
est dangereux. Etes-vous sûr que oui?Il est préférable de ne conserver que certains caractères (liste blanche) au lieu de supprimer certains caractères (liste noire).
Vous pouvez techniquement autoriser n'importe quel caractère, à condition de l'encoder correctement. Mais, pour répondre dans l'esprit de la question, vous ne devez autoriser que ces caractères:
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 spécifications pour plus de détails.
la source
Toujours sûr
Ceux-ci sont sûrs (en théorie / spécification), essentiellement n'importe où sauf le nom de domaine.
Encodez en pourcentage tout ce qui n'est pas répertorié, et vous êtes prêt à partir.
Parfois sûr
Uniquement sûr lorsqu'il est utilisé dans des composants URL spécifiques; utiliser avec précaution.
Jamais sûr
Selon la spécification URI (RFC 3986), tous les autres caractères doivent être encodés en pourcentage. Ceci comprend:
Si la compatibilité maximale est un problème, limitez le jeu de caractères à AZ az 0-9 - _.
(avec des points uniquement pour les extensions de nom de fichier).
Gardez le contexte à l'esprit
Même si elle est valide selon les spécifications, une URL peut toujours être "non sécurisée", selon le contexte. Comme une URL file: /// contenant des caractères de nom de fichier non valides, ou un composant de requête contenant "?", "=" Et "&" lorsqu'il n'est pas utilisé comme délimiteur. La gestion correcte de ces cas dépend généralement de vos scripts et peut être contournée, mais c'est quelque chose à garder à l'esprit.
la source
=
n'est pas sûr pour les requêtes. Par exemple, FIQL accepte les signes égaux et se décrit comme étant "compatible URI" et "optimisé et destiné à être utilisé dans le composant de requête". Dans mon interprétation, la RFC 3986 autorise explicitement "=", "&", "+" et autres dans les requêtes.params.toString() // "key=730d67"
" (3) Manuel PHP, http-build-query: "Génère une chaîne de requête encodée en URL. [...] L'exemple ci-dessus va afficher:0=foo&1=bar[...]
"(4) J. Starr, Perishable Press:" Lors de la création de pages Web, il est souvent nécessaire d'ajouter des liens qui nécessitent des chaînes de requête paramétrées. "En regardant RFC3986 - Uniform Resource Identifier (URI): Generic Syntax , votre question tourne autour du composant de chemin d'un URI.
Citant la section 3.3, les caractères valides pour un URI
segment
sont de typepchar
:Ce qui se décompose en:
En d' autres termes: Vous pouvez utiliser un caractère (non-contrôle-) de la table ASCII , excepter
/
,?
,#
,[
et]
.Cette compréhension est soutenue par RFC1738 - Uniform Resource Locators (URL) .
la source
-
et;
sont sûrs, c'est ce que ma réponse et RFC indiquent clairement.non réservé = ALPHA / DIGIT / "-" / "." / "_" / "~"
la source
D'après le contexte que vous décrivez, je soupçonne que ce que vous essayez réellement de faire est quelque chose qui s'appelle un «slug SEO». La meilleure pratique générale connue pour ceux-ci est:
Ainsi, à titre d'exemple, un article intitulé "L'utilisation de! @% $ * Pour représenter les jurons dans les bandes dessinées" obtiendrait un slug de "l'utilisation-représentent-jurons-bandes dessinées".
la source
Le format d'un URI est défini dans la RFC 3986 . Voir la section 3.3 pour plus de détails.
la source
Du point de vue du référencement, les tirets sont préférés aux traits de soulignement. Convertissez en minuscules, supprimez toutes les apostrophes, puis remplacez toutes les chaînes de caractères non alphanumériques par un seul trait d'union. Coupez les tirets en excès au début et à la fin.
la source
J'ai eu un problème similaire, je voulais avoir de jolies URL et je suis arrivé à la conclusion que je ne dois autoriser que les lettres, les chiffres et _ dans les URL. C'est bien, alors j'ai écrit une belle regex et j'ai réalisé qu'il reconnaît que tous les caractères UTF8 ne sont pas des lettres en .NET et qu'il était vissé. Cela semble être un problème connu pour le moteur .NET regex. Alors je suis arrivé à cette solution:
la source
J'ai trouvé très utile d'encoder mon URL en une URL sûre lorsque je renvoyais une valeur via ajax / php à une URL qui était ensuite lue à nouveau par la page.
Sortie PHP avec encodeur url pour le caractère spécial &
J'espère que tout le monde trouvera mes petits extraits de code utiles! :)
la source
Je pense que vous recherchez quelque chose comme "Encodage d'URL" - encoder une URL pour qu'elle soit "sûre" à utiliser sur le Web:
Voici une référence pour cela. Si vous ne voulez pas de caractères spéciaux, supprimez simplement ceux qui nécessitent un encodage URL:
http://www.w3schools.com/TAGS/ref_urlencode.asp
la source
Entre 3 et 50 caractères. Peut contenir des lettres minuscules, des chiffres et des caractères spéciaux - point (.), Tiret (-), trait de soulignement (_) et au taux (@).
la source