Ao colocar um endereço de email com uma etiqueta de endereço (também conhecido como sub-endereçamento) em um hiperlink mailto …
<a href="mailto:[email protected]">mail us now!</a>
… O sinal de mais no email deve ser codificado em URL?
<a href="mailto:username%[email protected]">mail us now!</a>
Não consigo descobrir isso, e a documentação é conflitante. Nossos testes no mundo real também produziram resultados mistos, tornando-os ainda mais confusos.
hyperlink
url-encoding
mailto
Jeff Atwood
fonte
fonte
Respostas:
O sinal de mais é usado para codificar espaços em URLs, não em HTML e nem em SMTP (RFC2821). No entanto, como
mailto:[email protected]
é um URI (possui um protocolo, o separador e o endereço do protocolo), deve ser tratado como um URI e deve ser codificado em porcentagem .Portanto, cabe ao cliente resolver com precisão a representação codificada e decodificá-la na medida do necessário. Aqui está a opinião oficial da Microsoft sobre o assunto .
Você deve aplicar a codificação de URL em mailto: URLs incorporados em HTML se os caracteres no endereço de email forem reservados por URI. Isso garante que você esteja fazendo a coisa correta. Cabe ao cliente decodificar o URI adequadamente de onde é recebido. Sim,
[email protected]
é um email muito válido; simthis%[email protected]
também é válido. Sim, esses dois são diferentes, mas se eles serão tratados de maneira diferente depende do cliente ...Como você observou anteriormente, nem todos os clientes processam isso corretamente. Sugiro encontrar o cliente mais provável (gmail? Clientes baseados em navegador? Outlook?) Que seus usuários usarão e farão o que esse cliente faz. Você disse que testou no GMail? Como você testou? Com um "mailto: client baseado no navegador (como complementos à oferta do firefox e do gmail), o URI provavelmente não está sendo decodificado (como deveria ser).
fonte
+
no URI,@
também precisa ser codificado porque também é um caractere reservado. Se você ler atentamente a RFC, descobrirá que, em uma parte opaca,+
é legal.Você pode codificar
+
, mas você não precisa.Primeiro, precisamos concordar que este
mailto
é um exemplo de um URI genérico, especificado pela RFC 2396 . (É isso que XHTML e HTML 4 usam).Agora vamos descobrir a lista de caracteres reservados no RFC 2396.
O URI se divide em absoluto e relativo:
E porque o esquema
mailto:
é especificado, este é um URI absoluto:E já que ambos os padrões para
hier_part
começar/
,mailto
é uma parte opaca.Portanto, a restrição é que você precisa escapar
/
se for o primeiro caractere, mas depois disso você poderá colocar caracteres reservados, incluindo+
e@
.Aqui está outra RFC para apoiar isso. Nas últimas RFCs do esquema mailto publicadas em 2010, denominadas RFC 6068 , ele diz:
fonte
/
,+
não se torna mais um caractere reservado.Uma leitura estrita da RFC relevante diz que o "+" deve ser codificado.
A seção 2, parte superior da página 2 em http://tools.ietf.org/html/rfc2368, diz:
O RFC para URIs (http://tools.ietf.org/html/rfc3986#section-2.2) lista "+" como um caractere reservado.
Dito isto, o que é "correto" não é necessariamente o que funcionará em todos os navegadores. Alguns navegadores obviamente sempre lidam com as coisas corretas como se estivessem erradas e as incorretas como se estivessem certas.
Edit: Quanto ao RFC6068 e seu "MAIO", eu leria isso como dependente do contexto. Se você estiver escrevendo o URL para leitura de texto, "+" faria mais sentido; no entanto , se você estiver escrevendo em HTML, a interpretação mais rigorosa do RFC3986 estará mais alinhada com as idéias "válidas em HTML" e, portanto, qualquer coisa que use o valor deve espere que seja codificado.
fonte
mailto
seria tratado comopath-rootless
, o que permite a sequência depchar
definida por(unreserved / pct-encoded / sub-delims / ":" / "@")
.+
faz parte desub-delims
. Portanto, uma leitura rigorosa diz+
que não requer codificação percentual.Por nova RFC http://tools.ietf.org/html/rfc6068#section-5
Então acho que a resposta é não, mas talvez?
fonte
Eu acho que codificá-lo ou não, não fará uma diferença real. O problema são os clientes de email. Por exemplo, o Yahoo Mail usa apenas hífen para subendereço, enquanto o gMail usa o sinal de mais.
Esses são meus 2 centavos ...
EDIT: A resposta abaixo tem um ponto sólido.
fonte
O RFC1738
Como não há caracteres reservados, ele deve ser codificado.
fonte
Since there are no reserved characters it should be encoded.
ummmm que não faz nenhum sentido.Por RFC 6068 como mencionado nas respostas, você pode codificar o sinal de mais como
%2B
.A razão pela qual há confusão é que converter um espaço em um plus não faz parte da codificação de URL padrão, faz parte da codificação de parâmetro de formulário (ou seja
application/x-www-form-urlencoded
)É como a diferença entre PHP
rawurlencode()
eurlencode()
.Portanto, o que a RFC 6068 está dizendo é que uma
mailto:
URL deve usar a codificação de URL padrão "bruta" (de acordo com a RFC 3986 ), e um sinal de adição que aparece na URL deve sempre ser tratado como um sinal de adição literal e não como um espaço que tenha foi codificado em forma.Se o cliente local converter o sinal de mais em um espaço, ele será quebrado.
fonte