ファイル名をエンコードし、/rest/get?name=Filename.txt
のようにURLの一部として送信します。 JSでは、リンク構造がFirefoxでのencodeURIComponent()の動作が異なる
url = '/rest/get?name=' + window.encodeURIComponent(file.name);
と同じくらい簡単です。これは単純な場合のために良い作品が、筋金入りのテストのために私は
你好abcABCæøåÆØÅäöüïëêîâéíáóúýñ½§!#¤%&()=`@£$€{[]}+´¨^~'-_,;.txt
という名前のファイルを使用するURIのエンコード後、私はリンク
/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
を得ることを期待
そして私はそれを手に入れます。構築されたリンクは、IEとChromeの最新バージョンでは正常に動作しますが、Firefoxでは失敗します。いくつかの調査の後、私はFirefoxのencodeURIcomponent
の動作が異なっていることを発見しました。ここでは、実際の結果は、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
ビジュアル比較(クロームリンクは左側にあり、Firefoxのリンクが右側にあります):
私もコピー&ペーストしようとしましたFirefoxへの有効なリンク(Chromeで構築されています)は正常に動作します。
なぜ異なる結果が得られますか?
です。これAバグで̶̶̶e̶n̶c̶o̶d̶e̶U̶R̶I̶c̶o̶m̶p̶o̶n̶e̶n̶t̶(̶)̶
にFirefoxの?̶
FirefoxはencodeURIComponent()
で別のエンコーディングを使用していますか?
UPD。私は同様の質問(encodeURIComponent behaves differently in browsers for China as location [検索]と encodeURIComponent difference with browsers and ä-ö-å characters [ööå])を見つけましたが、どちらも答えはありません。
UPD.2詳しい調査の結果、以下の文字が異なって符号化し、原因となっていることが示されているサーバー上で例外 'が見つかりませんファイル':
- 你好
- æøåÆØÅäöüïëêîâéíáóúýñを
- £€
いずれかFireFoxのフォントマップが異なる場合、またはJavaScriptインタプリタのために使用するものは何でもFFそれが出ていること打撃の。 – durbnpoisn
'%3F'は'? 'なので、ユニコードを正しく理解していないようです。 –
@JamesThorpeはい、そうです。しかし、あなたが見ることができるように、URLの他の部分は、異なって符号化されています。私が '你好'を最初から削除すると、それはまだ失敗します。 – naXa