Lorsque vous placez une adresse électronique avec une étiquette d'adresse (ou sous-adresse) dans un lien hypertexte mailto …
<a href="mailto:[email protected]">mail us now!</a>
… Le plus dans l'email devrait-il être encodé en URL?
<a href="mailto:username%[email protected]">mail us now!</a>
Je ne peux pas comprendre cela, et la documentation est en conflit. Nos tests dans le monde réel ont également produit des résultats mitigés, ce qui rend encore plus confus.
hyperlink
url-encoding
mailto
Jeff Atwood
la source
la source
Réponses:
Le plus est utilisé pour coder les espaces dans les URL, pas dans HTML ni dans SMTP (RFC2821). Cependant, étant donné qu’il
mailto:[email protected]
s’agit d’un URI (il a un protocole, le séparateur de protocole et l’adresse de protocole), il doit être traité comme un URI et codé en pourcentage .Par conséquent, il appartient au client de résoudre avec précision la représentation codée et de la décoder autant que de besoin. Voici la position officielle de Microsoft sur le sujet .
Vous devez appliquer le codage d’URL sur mailto: URL incorporées au format HTML si les caractères de l’adresse électronique sont réservés à l’URI. Cela garantit que vous faites la bonne chose. Il appartient au client de décoder l'URI de manière appropriée à partir duquel il est reçu. Oui,
[email protected]
est un email très valide; ouithis%[email protected]
est également valable. Oui, ces deux sont différents, mais c'est au client de décider s'ils seront traités différemment ...Comme vous l'avez noté précédemment, tous les clients ne rendent pas cela correctement. Je suggère de rechercher le client le plus probable (gmail? Clients basés sur un navigateur? Outlook?) Que vos utilisateurs utiliseront et de faire ce que ce client fait. Vous avez dit que vous avez testé sur GMail? Comment l'avez-vous testé? Avec un client mailto: basé sur un navigateur (comme des add-ons à Firefox et à une offre gmail), l’URI n’est probablement pas décodé (comme il se doit).
la source
+
en URI, vous devez@
également le faire, car il s'agit également d'un caractère réservé. Si vous lisez attentivement le RFC, vous découvrirez que, dans une partie opaque,+
c'est légal.Vous pouvez encoder
+
, mais vous n'êtes pas obligé.Premièrement, nous devons convenir qu’il
mailto
s’agit d’un exemple d’URI générique, spécifié par le RFC 2396 . (C’est ce qu’utilisent XHTML et HTML 4).Découvrons maintenant la liste des caractères réservés dans la RFC 2396.
L'URI se divise en absolu et relatif:
Et parce que le schéma
mailto:
est spécifié, il s'agit d'un URI absolu:Et puisque les deux modèles pour
hier_part
commencer/
,mailto
est une partie opaque.La restriction est donc que vous devez vous échapper
/
s'il s'agit du premier caractère, mais vous pouvez ensuite mettre des caractères réservés, y compris+
et@
.Voici un autre RFC pour supporter ceci. Dans le dernier RFC du système mailto publié en 2010, appelé RFC 6068 , il est dit:
la source
/
,+
ne devient plus un caractère réservé.Une lecture stricte de la RFC pertinente indique que le "+" doit être codé.
La section 2, haut de la page 2 sur http://tools.ietf.org/html/rfc2368 dit:
La RFC pour les URI (http://tools.ietf.org/html/rfc3986#section-2.2) répertorie "+" en tant que caractère réservé.
Cela dit, ce qui est "correct" n'est pas nécessairement ce qui fonctionnera dans tous les navigateurs. Il est évident que certains navigateurs traitent toujours les choses correctes comme si elles étaient fausses et les fausses comme si elles avaient raison.
Edit: Quant à la RFC6068 et son "MAY", je lirais cela comme dépendant du contexte. Si vous écrivez l'URL pour la lecture de texte, "+" aurait plus de sens. Toutefois, si vous l'écrivez en HTML, l'interprétation plus stricte de RFC3986 serait plus en ligne avec les idées "HTML valide". attendez-vous à ce qu'il soit encodé.
la source
mailto
serait traité commepath-rootless
ce qui permet la séquencepchar
définie par(unreserved / pct-encoded / sub-delims / ":" / "@")
.+
fait partie desub-delims
. Une lecture aussi stricte+
ne nécessite pas d'encodage en pourcentage.Par nouvelle RFC http://tools.ietf.org/html/rfc6068#section-5
Donc je suppose que la réponse est non, mais peut-être?
la source
Je pense que le coder ou non ne fera pas une réelle différence. Le problème sont les clients de messagerie. Par exemple, Yahoo Mail utilise uniquement un tiret pour l’adresse secondaire alors que gMail utilise le plus.
C'est mes 2 cents ...
EDIT: La réponse ci-dessous a un point solide.
la source
Le RFC1738
Puisqu'il n'y a pas de caractères réservés, il devrait être codé.
la source
Since there are no reserved characters it should be encoded.
ummmm ça n'a aucun sens.Conformément à la RFC 6068 mentionnée dans les réponses, vous POUVEZ coder le signe plus comme
%2B
.La confusion est due au fait que la conversion d'un espace en un plus ne fait pas partie du codage d'URL standard, mais du codage de paramètre de formulaire (c'est-à-dire
application/x-www-form-urlencoded
).C'est comme la différence entre PHP
rawurlencode()
eturlencode()
.La RFC 6068 indique donc qu'une
mailto:
URL doit utiliser un codage d'URL standard "brut" (conformément à la RFC 3986 ), et qu'un signe plus apparaissant dans l'URL doit toujours être traité comme un signe plus littéral, et non comme un espace été forme codée.Si le client local convertit le plus dans un espace, il est cassé.
la source