Beim Platzieren einer E-Mail-Adresse mit einem Adress-Tag (auch als Unteradresse bezeichnet ) in einem Mailto- Hyperlink ...
<a href="mailto:[email protected]">mail us now!</a>
… Soll das Pluszeichen in der E-Mail URL-verschlüsselt sein?
<a href="mailto:username%[email protected]">mail us now!</a>
Ich kann das nicht herausfinden und die Dokumentation ist widersprüchlich. Unsere Tests in der Praxis haben ebenfalls gemischte Ergebnisse geliefert, was die Sache noch verwirrender macht.
hyperlink
url-encoding
mailto
Jeff Atwood
quelle
quelle
Antworten:
Das Pluszeichen wird zum Codieren von Leerzeichen in URLs verwendet, nicht in HTML und nicht in SMTP (RFC2821). Da es sich jedoch
mailto:[email protected]
um einen URI handelt (er hat ein Protokoll, das Protokolltrennzeichen und die Protokolladresse), sollte er als URI behandelt und in Prozent codiert werden .Daher ist es Sache des Kunden, die codierte Darstellung genau aufzulösen und soweit angemessen zu decodieren. Hier ist die offizielle Meinung von Microsoft zu diesem Thema .
Sie sollten die URL-Codierung auf mailto: -URLs anwenden, die in HTML eingebettet sind, wenn die Zeichen in der E-Mail-Adresse URI-reserviert sind. Dies stellt sicher, dass Sie das Richtige tun. Es ist Aufgabe des Clients, den URI entsprechend zu dekodieren, von wo er empfangen wird. Ja,
[email protected]
ist eine sehr gültige E-Mail; jathis%[email protected]
ist auch gültig. Ja, diese beiden sind unterschiedlich, aber ob sie anders behandelt werden, liegt beim Kunden ...Wie Sie bereits bemerkt haben, wird dies nicht von allen Clients korrekt wiedergegeben. Ich schlage vor, den wahrscheinlichsten Client (Google Mail, browserbasierte Clients, Outlook) zu finden, den Ihre Benutzer verwenden, und das zu tun, was dieser Client tut. Sie sagten, Sie haben auf GMail getestet? Wie hast du es getestet? Bei einem "browserbasierten mailto: client" (wie Add-Ons zu Firefox und Google Mail) wird der URI höchstwahrscheinlich nicht entschlüsselt (wie er sein sollte).
quelle
+
in URI@
codiert haben , muss auch codiert werden, da es auch ein reserviertes Zeichen ist. Wenn Sie den RFC sorgfältig lesen, werden Sie feststellen, dass ein undurchsichtiger Teil+
legal ist.Sie KÖNNEN codieren
+
, müssen es aber nicht.Zunächst müssen wir uns darauf einigen, dass dies
mailto
ein Beispiel für einen generischen URI ist, der in RFC 2396 angegeben ist . (Dies ist, was XHTML und HTML 4 verwenden).Lassen Sie uns nun die Liste der reservierten Zeichen in RFC 2396 herausfinden.
URI unterteilt sich in absolute und relative:
Und da Schema
mailto:
angegeben ist , ist dies ein absoluter URI:Und da beide Muster
hier_part
anfangen/
,mailto
ist das ein undurchsichtiger Teil.Die Einschränkung besteht also darin, dass Sie
/
beim ersten Zeichen entkommen müssen , danach jedoch reservierte Zeichen einschließlich+
und eingeben können@
.Hier ist ein weiterer RFC, der dies unterstützt. In den neuesten RFCs des Mailto-Schemas aus dem Jahr 2010 mit dem Namen RFC 6068 heißt es:
quelle
/
, wird es+
nicht länger zu einem reservierten Zeichen.Ein striktes Lesen des relevanten RFC besagt, dass das "+" codiert werden sollte.
In Abschnitt 2, oben auf Seite 2, auf http://tools.ietf.org/html/rfc2368 heißt es:
Der RFC für URIs (http://tools.ietf.org/html/rfc3986#section-2.2) listet "+" als reserviertes Zeichen auf.
Das heißt, was "richtig" ist, funktioniert nicht unbedingt in allen Browsern. Einige Browser behandeln die richtigen Dinge offensichtlich immer so, als wären sie falsch und die falschen so, als wären sie richtig.
Edit: Was RFC6068 und sein "MAI" betrifft, würde ich das als kontextabhängig lesen. Wenn Sie die URL für Text schreiben , liest , dann „+“ würde mehr Sinn machen, aber wenn Sie es in HTML zu schreiben sind dann wäre die strengere Auslegung der RFC3986 mehr inline mit „valid HTML“ Ideen und so etwas sollte den Wert mit erwarte, dass es verschlüsselt wird.
quelle
mailto
würde als behandeltpath-rootless
, was die Reihenfolge vonpchar
definiert durch ermöglicht(unreserved / pct-encoded / sub-delims / ":" / "@")
.+
ist ein Teil vonsub-delims
. Strenges Lesen+
erfordert also keine prozentuale Kodierung.Per neuem RFC http://tools.ietf.org/html/rfc6068#section-5
Also denke ich, die Antwort ist nicht, aber vielleicht?
quelle
Ich denke, dass Codierung es oder nicht, keinen wirklichen Unterschied machen wird. Das Problem sind die Mail-Clients. Beispielsweise verwendet Yahoo Mail nur einen Bindestrich für die Subadressierung, während gMail das Pluszeichen verwendet.
Das sind meine 2 Cent ...
BEARBEITEN: Die Antwort unten hat einen festen Punkt.
quelle
Der RFC1738
Da es keine reservierten Zeichen gibt, sollte es codiert werden.
quelle
Since there are no reserved characters it should be encoded.
ähm, das ergibt keinen Sinn.Gemäß RFC 6068, wie in den Antworten erwähnt, KÖNNEN Sie das Pluszeichen als codieren
%2B
.Der Grund für die Verwirrung ist, dass das Konvertieren eines Leerzeichens in ein Pluszeichen nicht Teil der Standard-URL-Codierung ist, sondern Teil der Codierung von Formularparametern (z. B.
application/x-www-form-urlencoded
).Es ist wie der Unterschied zwischen PHP
rawurlencode()
undurlencode()
.Was RFC 6068 sagt, ist, dass eine
mailto:
URL "rohe" Standard-URL-Codierung (gemäß RFC 3986 ) verwenden sollte und ein Pluszeichen, das in der URL erscheint, immer als wörtliches Pluszeichen und nicht als Leerzeichen behandelt werden sollte formularkodiert worden.Wenn der lokale Client das Pluszeichen in ein Leerzeichen konvertiert, ist es kaputt.
quelle