Warum ist das %2B string urldecoded?
[Dies ist vielleicht nicht gerade ein Programmier-Frage, aber es ist ein Rätsel, dass kann man am besten beantworten, indem Programmierer. Ich versuchte es zuerst auf die Pro-Webmaster-Website, um die überwältigende Stille]
Haben wir eine E-Mail-Adresse überprüfung auf unserer website. Die Website generiert zunächst ein passender Schlüssel als string
mykey
Es dann kodiert, der Schlüssel als eine Reihe von bytes
&$dac~ʌ����!
Es dann base64-kodiert werden, dass einige bytes
JiRkYWN+yoyIhIQ==
Da dieser Schlüssel wird als querystring-Wert einer URL in einer HTML-E-Mail, müssen wir zuerst URLEncode es dann HTMLEncode das Ergebnis, was uns (es gibt keine Wirkung von HTMLEncoding in der Beispiel-Fall, aber ich kann nicht belästigt werden, zu überarbeiten. B.)
JiRkYWN%2ByoyIhIQ%3D%3D
Dies ist dann eingebettet in HTML-Code, der gesendet wird, als Teil einer E-Mail, so etwas wie:
click <a href="http://myapp/verify?key=JiRkYWN%2ByoyIhIQ%3D%3D">here</a>.
Or paste <b>http://myapp/verify?key=JiRkYWN%2ByoyIhIQ%3D%3D</b> into your browser.
Wenn der empfangende Benutzer auf den link klickt, wird die Website die Anforderung empfängt, extrahiert den Wert der querystring-Parameter 'key' - parameter, base64-dekodiert, entschlüsselt es und macht die entsprechende Sache in Bezug auf die Website-Logik.
Jedoch gelegentlich haben wir Benutzer, die berichten, dass Ihre klicken ist unwirksam. Ein solcher Benutzer weitergeleitet, die uns die E-Mail, die er geschickt worden war, und auf die Inspektion des HTML hatte, verwandelt wurde (um es in Bezug auf das Beispiel oben)
click <a href="http://myapp/verify?key=JiRkYWN+yoyIhIQ%3D%3D">here</a>
Or paste <b>http://myapp/verify?key=JiRkYWN+yoyIhIQ%3D%3D</b> into your browser.
Ist, die %2B " string - aber keiner von den anderen Prozentsatz-kodierte strings - wurde umgewandelt in ein plus. (Es ist definitiv verlassen uns mit den richtigen Werten - ich habe die entsprechenden SMTP-Protokolle).
key=JiRkYWN%2ByoyIhIQ%3D%3D
key=JiRkYWN+yoyIhIQ%3D%3D
So, ich denke, es gibt ein paar Möglichkeiten:
-
Gibt es etwas, was ich mache, ist blöd, dass ich nicht sehen kann, oder
-
Einige mail-clients konvertieren %2b-Saiten, plus-Zeichen, vielleicht, um zu versuchen zu bewältigen mit dem problem von Menschen, die fälschlicherweise URLEncoding plus-Zeichen
Im Falle von 1 - was ist das? Im Fall von 2 - gibt es einen standard, bekannt Umgang mit dieser Art von Szenario?
Vielen Dank für jede Hilfe
InformationsquelleAutor Yellowfog | 2013-09-06
Du musst angemeldet sein, um einen Kommentar abzugeben.
Liegt das problem bei diesem Schritt
Ihre Anwendung am "anderen Ende" werden müssen, fehlt ein Schritt unescaping. Unabhängig davon, ob es ein %2B oder a + a-Funktion wie perls uri_unescape zurück konsistente Antworten
Hier ist, was geschehen sollte. Alle, die ich zeige, sind die Schritte. Ich bin mit perl im debugger. Schritt 54 wird der string in base64. Schritt 55 zeigt, wie die base64-codierten string gemacht werden konnten, in einen uri-escaped-parameter. Die Schritte 56 und 57 sind, was die Clients tun sollte, zu entschlüsseln.
Eine mögliche Arbeit um zu gewährleisten, dass Ihre base64 "Schlüssel" enthält keine plus-Zeichen!
InformationsquelleAutor Vorsprung
Was kann hier passiert ist, dass die URLDecode dreht sich die
%2b
in eine+
wird interpretiert als ein Leerzeichen in der URL. Ich war in der Lage zu überwinden ein ähnliches problem, indem Sie zuerst urldecoding den string, dann mit einer replace-Funktion zu ersetzen, Leerzeichen in den dekodierten string mit+
Zeichen, und dann entschlüsseln zu den "festen" string.InformationsquelleAutor rcoopman