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.
reserved = ";" | "/" | "?" | ":" | "@" | "&" | "=" | "+" |
"$" | ","
O URI se divide em absoluto e relativo:
URI-reference = [ absoluteURI | relativeURI ] [ "#" fragment ]
E porque o esquema mailto:é especificado, este é um URI absoluto:
absoluteURI = scheme ":" ( hier_part | opaque_part )
E já que ambos os padrões para hier_partcomeçar /, mailtoé uma parte opaca.
opaque_part = uric_no_slash *uric
uric_no_slash = unreserved | escaped | ";" | "?" | ":" | "@" |
"&" | "=" | "+" | "$" | ","
uric = reserved | unreserved | escaped
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:
'mailto'Da mesma forma, o software que cria URIs deve ter o cuidado de codificar qualquer caractere reservado usado. Os formulários HTML são um tipo de software que cria 'mailto'URIs. As implementações atuais codificam um espaço como '+', mas isso cria problemas porque essa '+'posição para um espaço não pode ser distinguida da real '+'em um 'mailto'
URI. Ao produzir 'mailto'URIs, todos os espaços devem ser codificados como
%20, e '+'caracteres podem ser codificados como %2B. Observe que os '+'
caracteres são frequentemente usados como parte de um endereço de email para indicar um sub-endereço, como por exemplo em <bill+ietf@example.org>.