Al colocar una dirección de correo electrónico con una etiqueta de dirección (también conocida como subdireccionamiento) en un hipervínculo mailto ...
<a href="mailto:[email protected]">mail us now!</a>
... ¿debería el más en el correo electrónico estar codificado con URL?
<a href="mailto:username%[email protected]">mail us now!</a>
No puedo entender esto, y la documentación es conflictiva. Nuestras pruebas del mundo real también han producido resultados mixtos, lo que lo hace aún más confuso.
hyperlink
url-encoding
mailto
Jeff Atwood
fuente
fuente
Respuestas:
La ventaja se usa para codificar espacios en URL, no en HTML ni en SMTP (RFC2821). Sin embargo, dado que
mailto:[email protected]
es un URI (tiene un protocolo, el separador de protocolo y la dirección del protocolo), debe tratarse como un URI y debe codificarse en porcentaje .Por lo tanto, corresponde al cliente resolver con precisión la representación codificada y decodificarla en la medida adecuada. Aquí está la opinión oficial de Microsoft sobre el asunto .
Debe aplicar la codificación de URL en mailto: URL incrustadas en HTML si los caracteres de la dirección de correo electrónico están reservados a URI. Esto asegura que estás haciendo lo correcto. Depende del cliente decodificar el URI de forma adecuada desde donde se recibe. Sí,
[email protected]
es un correo electrónico muy válido; Síthis%[email protected]
también es válido. Sí, esos dos son diferentes, pero si serán tratados de manera diferente depende del cliente ...Como notó anteriormente, no todos los clientes representan esto correctamente. Sugiero encontrar el cliente más probable (gmail? Clientes basados en navegador? Outlook?) Que usarán sus usuarios y hacer lo que ese cliente hace. ¿Dijiste que probaste en GMail? ¿Cómo lo probaste? Con un "cliente de mailto: basado en navegador (como los complementos para firefox y la oferta de gmail), lo más probable es que el URI no se decodifique (como debería ser).
fuente
+
en URI,@
también debe codificarse porque también es un carácter reservado. Si lee detenidamente el RFC, descubrirá que, en una parte opaca,+
es legal.PUEDES codificar
+
, pero no tienes que hacerlo.Primero, debemos aceptar que
mailto
es un ejemplo de un URI genérico, especificado por RFC 2396 . (Esto es lo que usan XHTML y HTML 4).Ahora descubramos la lista de caracteres reservados en RFC 2396.
URI se divide en absoluto y relativo:
Y debido a que
mailto:
se especifica el esquema, este es un URI absoluto:Y dado que ambos patrones para
hier_part
empezar/
,mailto
es una parte opaca.Entonces, la restricción es que tienes que escapar
/
si se trata del primer carácter, pero después de eso puedes poner caracteres reservados incluyendo+
y@
.Aquí hay otro RFC para apoyar esto. En las últimas RFC del esquema mailto publicado en 2010 llamado RFC 6068 , dice:
fuente
/
,+
ya no se convierte en un personaje reservado.Una lectura estricta del RFC relevante dice que el "+" debe estar codificado.
La Sección 2, parte superior de la página 2 en http://tools.ietf.org/html/rfc2368 dice:
El RFC para URI (http://tools.ietf.org/html/rfc3986#section-2.2) enumera "+" como un carácter reservado.
Dicho esto, lo que es "correcto" no es necesariamente lo que funcionará en todos los navegadores. Algunos navegadores obviamente siempre manejarán las cosas correctas como si estuvieran equivocadas y las incorrectas como si estuvieran en lo correcto.
Editar: En cuanto a RFC6068 y su "MAYO", lo leería como dependiente del contexto. Si está escribiendo la URL para la lectura de texto, entonces "+" tendría más sentido, sin embargo , si lo está escribiendo en HTML, la interpretación más estricta de RFC3986 estaría más en línea con las ideas "HTML válidas" y, por lo tanto, cualquier cosa que use el valor debería Esperamos que esté codificado.
fuente
mailto
sería tratado comopath-rootless
, lo que permite una secuenciapchar
definida por(unreserved / pct-encoded / sub-delims / ":" / "@")
.+
es parte desub-delims
. Entonces, la lectura estricta dice+
que no requiere codificación porcentual.Por nuevo RFC http://tools.ietf.org/html/rfc6068#section-5
Entonces supongo que la respuesta es no, ¿pero tal vez?
fuente
Creo que codificarlo o no, no hará una diferencia real. El problema son los clientes de correo. Por ejemplo, Yahoo Mail solo usa guiones para subdirección mientras que gMail usa el signo más.
Esos son mis 2 centavos ...
EDITAR: La respuesta a continuación tiene un punto sólido.
fuente
El RFC1738
Como no hay caracteres reservados, debe codificarse.
fuente
Since there are no reserved characters it should be encoded.
ummmm eso no tiene ningún sentido.Según RFC 6068 como se menciona en las respuestas, PUEDE codificar el signo más como
%2B
.La razón por la que hay confusión es que convertir un espacio en un plus no es realmente parte de la codificación de URL estándar, es parte de la codificación de parámetros de formulario (es decir,
application/x-www-form-urlencoded
)Es como la diferencia entre PHP
rawurlencode()
yurlencode()
.Entonces, lo que dice RFC 6068 es que una
mailto:
URL debe usar una codificación URL estándar "sin procesar" (según RFC 3986 ), y un signo más que aparece en la URL siempre debe tratarse como un signo más literal, y no como un espacio que tiene sido codificado en formaSi el cliente local convierte el plus en un espacio, se rompe.
fuente