Podczas umieszczania adresu e-mail z tagiem adresu (inaczej podadresowaniem) w hiperłączu mailto …
<a href="mailto:[email protected]">mail us now!</a>
… Czy plus w e-mailu powinien być zakodowany w adresie URL?
<a href="mailto:username%[email protected]">mail us now!</a>
Nie mogę tego rozgryźć, a dokumentacja jest w konflikcie. Nasze testy w prawdziwym świecie przyniosły również mieszane wyniki, co czyni go jeszcze bardziej zagmatwanym.
hyperlink
url-encoding
mailto
Jeff Atwood
źródło
źródło
Odpowiedzi:
Znak plus służy do kodowania spacji w adresach URL, a nie w HTML i nie w SMTP (RFC2821). Ponieważ jednak
mailto:[email protected]
jest to URI (ma protokół, separator protokołu i adres protokołu), powinien być traktowany jako URI i powinien być zakodowany w procentach .Dlatego to klient musi dokładnie rozwiązać zakodowaną reprezentację i zdekodować ją w miarę potrzeb. Oto oficjalne stanowisko Microsoft w tej sprawie .
Powinieneś zastosować kodowanie adresu URL w mailto: Adresy URL osadzone w HTML, jeśli znaki w adresie e-mail są zarezerwowane dla URI. To gwarantuje, że postępujesz właściwie. Klient musi odpowiednio zdekodować identyfikator URI, skąd został odebrany. Tak,
[email protected]
to bardzo ważny adres e-mail; takthis%[email protected]
jest również ważne. Tak, te dwa są różne, ale to, czy zostaną potraktowane inaczej, zależy od klienta ...Jak wspomniano wcześniej, nie wszyscy klienci renderują to poprawnie. Sugeruję znalezienie najbardziej prawdopodobnego klienta (Gmaila? Przeglądarki opartej na przeglądarce? Outlooka?), Którego będą używać Twoi użytkownicy, i robienia tego, co robi ten klient. Powiedziałeś, że testowałeś na Gmailu? Jak to przetestowałeś? W przypadku „klienta mailto: opartego na przeglądarce (takiego jak dodatki do firefox i oferta Gmaila) najprawdopodobniej identyfikator URI nie jest dekodowany (tak jak powinien).
źródło
+
w URI,@
również należy go zakodować, ponieważ jest to również znak zastrzeżony. Jeśli dokładnie przeczytasz RFC, przekonasz się, że w nieprzejrzystej części+
jest legalne.MOŻESZ kodować
+
, ale nie musisz.Po pierwsze, musimy się zgodzić, że
mailto
jest to przykład ogólnego identyfikatora URI, określonego przez RFC 2396 . (Właśnie tego używają XHTML i HTML 4).Teraz poznajmy listę zarezerwowanych znaków w RFC 2396.
URI dzieli się na bezwzględne i względne:
A ponieważ
mailto:
określono schemat, jest to bezwzględny identyfikator URI:A od obu wzorów na
hier_part
początek/
,mailto
jest nieprzezroczysta część.Ograniczeniem jest to, że musisz uciec,
/
jeśli chodzi o pierwszą postać, ale potem możesz wstawić zastrzeżone znaki, w tym+
i@
.Oto kolejny RFC, który to obsługuje. W najnowszej wersji RFC programu mailto opublikowanej w 2010 r. O nazwie RFC 6068 napisano:
źródło
/
,+
nie staje się już postacią zarezerwowaną.Ścisła lektura odpowiedniego dokumentu RFC mówi, że znak „+” należy zakodować.
Sekcja 2, góra strony 2 na http://tools.ietf.org/html/rfc2368 mówi:
RFC dla identyfikatorów URI (http://tools.ietf.org/html/rfc3986#section-2.2) wymienia „+” jako znak zastrzeżony.
To powiedziawszy, „poprawne” niekoniecznie musi działać we wszystkich przeglądarkach. Niektóre przeglądarki będą oczywiście zawsze obsługiwały prawidłowe rzeczy, tak jakby były one błędne, a te niepoprawne, jakby miały rację.
Edycja: Jeśli chodzi o RFC6068 i jego „MAY”, czytałbym to jako zależne od kontekstu. Jeśli piszesz adres URL do czytania tekstu, wtedy „+” miałoby większy sens, jednak jeśli piszesz go w HTML, bardziej rygorystyczna interpretacja RFC3986 byłaby bardziej zgodna z ideami „poprawnego HTML”, a więc wszystko, co używa tej wartości, powinno spodziewaj się, że zostanie zakodowany.
źródło
mailto
byłby traktowany jakopath-rootless
, co pozwala na sekwencjępchar
zdefiniowaną przez(unreserved / pct-encoded / sub-delims / ":" / "@")
.+
jest częściąsub-delims
. Czytanie ścisłe mówi,+
że nie wymaga kodowania procentowego.Zgodnie z nowym RFC http://tools.ietf.org/html/rfc6068#section-5
Myślę, że odpowiedź brzmi „nie”, ale może?
źródło
Myślę, że to kodowanie czy nie, nie zrobi żadnej różnicy. Problemem są klienci pocztowi. Na przykład, Yahoo Mail używa tylko myślnika do podadresowania, podczas gdy gMail używa plus.
To moje 2 centy ...
EDYCJA: Poniższa odpowiedź ma solidny punkt.
źródło
RFC1738
Ponieważ nie ma znaków zastrzeżonych, należy go zakodować.
źródło
Since there are no reserved characters it should be encoded.
ummmm, to nie ma sensu.Zgodnie z RFC 6068, jak wspomniano w odpowiedziach, MOŻESZ zakodować znak plus jako
%2B
.Powodem zamieszania jest to, że przekształcenie spacji w plus nie jest tak naprawdę częścią standardowego kodowania adresu URL, lecz częścią kodowania parametrów formularza (tj.
application/x-www-form-urlencoded
)To jest jak różnica między PHP
rawurlencode()
aurlencode()
.Zatem RFC 6068 mówi, że
mailto:
adres URL powinien używać „surowego” standardowego kodowania adresu URL (zgodnie z RFC 3986 ), a znak plus wyświetlany w adresie URL powinien zawsze być traktowany jako dosłowny znak plus, a nie jako spacja, która ma zostały zakodowane w formie.Jeśli klient lokalny przekształci plus na spację, zostanie on zepsuty.
źródło