Ich kodiere einen Dateinamen und sende es als Teil einer URL wie /rest/get?name=Filename.txt
. In JS Link Aufbau so einfach wieUnterschiedliches Verhalten von encodeURIComponent() in Firefox nur
url = '/rest/get?name=' + window.encodeURIComponent(file.name);
Es ist für einfache Fälle gut funktioniert, aber für Hardcore-Test verwende ich eine Datei
你好abcABCæøåÆØÅäöüïëêîâéíáóúýñ½§!#¤%&()=`@£$€{[]}+´¨^~'-_,;.txt
Nach URI-Kodierung genannt Ich erwarte einen Link
/rest/get?name=%E4%BD%A0%E5%A5%BDabcABC%C3%A6%C3%B8%C3%A5%C3%86%C3%98%C3%85%C3%A4%C3%B6%C3%BC%C3%AF%C3%AB%C3%AA%C3%AE%C3%A2%C3%A9%C3%AD%C3%A1%C3%B3%C3%BA%C3%BD%C3%B1%C2%BD%C2%A7%3F%3FabcABC%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD!%23%C2%A4%25%26()%3D%60%40%C2%A3%24%E2%82%AC%7B%5B%5D%7D%2B%C2%B4%C2%A8%5E~%27-_%2C%3B.txt
zu erhalten
Und ich verstehe es. Der konstruierte Link funktioniert in den neuesten Versionen von IE und Chrome einwandfrei, schlägt aber in Firefox fehl. Nach einigen Untersuchungen habe ich festgestellt, dass in Firefox encodeURIcomponent
anders funktioniert. Hier tatsächliche Ergebnis in Firefox:
/rest/get?name=%3F%3FabcABC%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD!%23%EF%BF%BD%25%26%28%29%3D%60%40%EF%BF%BD%24%3F{[]}%2B%EF%BF%BD%EF%BF%BD^~%27-_%2C%3B.txt
Visueller Vergleich (Chrome-Link ist auf der linken Seite und Firefox Link auf der rechten Seite):
Ich habe auch zu kopieren und versucht die gültiger Link (in Chrome erstellt) zu Firefox und es funktioniert ok.
Warum bekomme ich unterschiedliche Ergebnisse?
Ist es ein Fehler mit ̶ ̶e̶n̶c̶o̶d̶e̶U̶R̶I̶c̶o̶m̶p̶o̶n̶e̶n̶t̶(̶)̶
̶ FireFox? ̶
Firefox eine andere Codierung in encodeURIComponent()
verwenden Hat?
UPD. Ich habe ähnliche Fragen (encodeURIComponent behaves differently in browsers for China as location [搜索] und encodeURIComponent difference with browsers and ä-ö-å characters [äöå]), beide ohne Antwort gefunden.
UPD.2 Weitere Untersuchungen haben gezeigt, dass die folgenden Zeichen unterschiedlich codiert und verursacht auf Server Ausnahme 'Datei nicht gefunden':
- 你好
- æøåÆØÅäöüïëêîâéíáóúýñ
- ½§¤
- €
Ich werde erraten, dass es entweder, dass die FireFox Schrift Karte ist anders, oder dass das, was FF für ein JavaScript-Interpreter verwendet, ist aus von whack. – durbnpoisn
'% 3F' ist'? ', Also sieht es so aus, als würde man den Unicode nicht richtig verstehen. –
@JamesThorpe ja, du hast Recht. Aber wie Sie sehen können, ist der andere Teil von URL auch anders kodiert und wenn ich '你好' von Anfang an lösche, schlägt es immer noch fehl. – naXa