Über den folgenden URL-Link wird ein neues Google Mail-Fenster geöffnet. Das Problem, das ich habe, ist, dass Google alle Pluszeichen (+) im E-Mail-Text durch Leerzeichen ersetzt. Es sieht so aus, als ob es nur mit dem + -Zeichen passiert. Irgendwelche Vorschläge, wie man das beheben kann? (Ich arbeite auf der ASP.NET-Webseite)
https://mail.google.com/mail?view=cm&tf=0&[email protected]&su=some subject & body = Hallo zusammen + Hallo da
(In der Text-E-Mail wird "Hallo dort + Hallo dort" als "Hallo dort Hallo dort" angezeigt.)
Uri
Eigenschaft von verwenden, erhaltenUriBuilder
Sie ein schlechtes Ergebnis.uriBuilder.Uri.ToString()
in Ihrem Beispiel würde zurückkehrenHi+there+Hello+there
. Die VerwendunguriBuilder.Uri.AbsoluteUri
scheint ordnungsgemäß zu funktionieren, und stackoverflow.com/a/15120429/1931573 legt nahe, dass dies in .NET 4.5 behoben ist. In Bezug auf RFC besagt die HTML 4-Spezifikation, dass der URL-Querystring vom Typ ist,application/x-www-form-urlencoded
der selbst (+) als Bedeutungsraum definiert. Es ist also kein RFC, sondern Teil des HTML-Standards.Wenn Sie ein Pluszeichen (+) im Körper möchten, müssen Sie es als 2B codieren.
Zum Beispiel: Versuchen Sie dies
quelle
Verwenden Sie für die Javascript-Sprache die Funktion encodeURIComponent, um Sonderzeichen zu codieren
quelle
Es ist sicherer, alle Zeichen mit Ausnahme der in RFC-3986 als "nicht reserviert" definierten Zeichen immer in Prozent zu codieren.
nicht reserviert = ALPHA / DIGIT / "-" / "." / "_" / "~"
Codieren Sie also das Pluszeichen und andere Sonderzeichen in Prozent.
Das Problem, das Sie mit Pluspunkten haben, liegt darin, dass gemäß RFC-1866 (HTML 2.0-Spezifikation) Absatz 8.2.1. Unterabsatz 1., "Die Namen und Werte der Formularfelder werden maskiert: Leerzeichen werden durch" + "ersetzt, und dann werden reservierte Zeichen maskiert"). Diese Art der Codierung von Formulardaten wird auch in späteren HTML-Spezifikationen angegeben. Suchen Sie nach relevanten Absätzen zu application / x-www-form-urlencoded.
quelle
Nur um dies der Liste hinzuzufügen:
Uri.EscapeUriString("Hi there+Hello there") // Hi%20there+Hello%20there Uri.EscapeDataString("Hi there+Hello there") // Hi%20there%2BHello%20there
Siehe https://stackoverflow.com/a/34189188/98491
Normalerweise möchten Sie verwenden,
EscapeDataString
was es richtig macht.quelle