Wie zu erkennen, wenn ein string kodiert ist, mit escape() oder alsterrunde()
Ich habe ein web-service, empfängt Daten von verschiedenen clients. Einige von Ihnen sendet die Daten verschlüsselt mittels escape(), während die anderen stattdessen alsterrunde(). Gibt es eine Möglichkeit zum erkennen der Codierung verwendet, um die Flucht der Daten?
- Warum müssen Sie das wissen?
- Ich habe keine Kontrolle über die gesendeten Daten von unseren Kunden, und wie ich schon sagte, einige von Ihnen entkommen (), während die anderen verwenden alsterrunde() statt. Mit unescape in einem string codiert mit alsterrunde() erzeugen schlechtes Zeichen, und ich möchte vermeiden, dass. Eine juristische überprüfung, um zu schauen, ob der string nur hat es escape-Sequenzen, in Paaren, als %xx%xx.
- Endlich habe ich die Antwort gefunden. decodeURIComponent wird immer decodieren escaped chars, wie es verwendet einige Konventionen zu erkennen, die für jedes symbol, wenn die Codierung in utf-8 oder ascii. Jedoch, wie Swingley Kommentare, wenn ein client sendet verschlüsselte Daten, die mit escape(), einige Daten könnten verloren gehen oder verstümmelt. Also ich gebe den Punkt an ihn.
- Da alsterrunde() verwendet UTF-8-Codierung von Zeichen >= 128, können Sie auf die server-seitige Prüfung auf gültige UTF-8-Sequenzen. Wenn die Daten enthalten ungültige UTF-8-Sequenzen, die die Daten erzeugt worden ist, mit escape() und Sie müssen wohl davon ausgehen, es ist ISO-8859-1 kodiert. Oktette von ISO-8859-1-Daten in der Praxis nie Aussehen gültige UTF-8-Sequenzen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ermutigen Sie Ihre Kunden zu bedienen alsterrunde(). Siehe hier für eine Erklärung: Vergleichen escape(), encodeURI () und alsterrunde(). Wenn Sie wirklich wollen, um zu versuchen, genau herauszufinden, wie etwas codiert wurde, können Sie versuchen, für einige der Zeichen, die escape() und encodeURI() nicht Kodieren.
function isEncoded(str){return decodeURIComponent(str) !== str;}
Nicht umhin, in die server-Seite, sondern in der client-Seite habe ich mit Hilfe von javascript-Ausnahmen zu erkennen, ob die url-Codierung produziert hat ISO-Latin oder UTF-8-Codierung.
decodeURIComponent
wirft eine exception für ungültige UTF8-Sequenzen.Beispielsweise ISO-Latin codierte Umlaute 'ä'
%E4
eine Ausnahme in Firefox, aber UTF8-kodiertes 'ä'%C3%A4
nicht.Siehe Auch
Ich weiß, das ist eine alte Frage, aber ich bin mir nicht bewusst eine bessere Lösung. Also ich mache es wie hier (Dank einem Kommentar von RobertPitt oben):
Habe ich noch nicht aufgetretenen Fall, wo dies nicht. Was nicht heißt, dass Fall nicht vorhanden ist. Vielleicht könnte jemand etwas Licht in diese Schuppen.
http://google.de/hello%20world woops
. Noch nach einem eleganten Weg, dies zu behandeln.Danke für @mika für die tolle Antwort. Vielleicht nur eine Verbesserung seit der unescape-Funktion gilt als veraltet:
}
Sie nicht haben, um Sie zu unterscheiden. escape() ist die sogenannte Prozent-Codierung, es unterscheidet sich nur von der URI-Codierung, wie bestimmte chars kodiert. Zum Beispiel ist der Platz als %20 kodiert mit Flucht, aber + mit URI-Kodierung. Einmal entschlüsselt, erhalten Sie immer den gleichen Wert.