gpt4 book ai didi

javascript - 仅在 Firefox 中 encodeURIComponent() 的不同行为

转载 作者:数据小太阳 更新时间:2023-10-29 03:57:46 24 4
gpt4 key购买 nike

我对文件名进行编码并将其作为 URL 的一部分发送,例如 /rest/get?name=Filename.txt。在 JS 中链接构造非常简单

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

视觉对比(左侧为 Chrome 链接,右侧为 Firefox 链接):

Comparison

我还尝试将有效链接(在 Chrome 中构建)复制并粘贴到 Firefox,它工作正常。

为什么我得到不同的结果?
i̶s̶s̶i̶t̶a̶a̶b̶u̶g̶g̶g̶̶Firefox 是否在 encodeURIComponent() 中使用不同的编码?

UPD. 我发现了类似的问题(encodeURIComponent behaves differently in browsers for China as location [搜索] 和 encodeURIComponent difference with browsers and ä-ö-å characters [äöå]),两者都没有答案。

UPD.2 进一步调查表明以下字符编码不同,导致服务器上出现“找不到文件”异常:

  • 你好
  • æøåÆØÅäöüïëêîâéíáóúýñ
  • ½§¤
  • £€

最佳答案

我想您的问题不是 encodeURIComponent() 方法。它是任何构造 file.name 的编码。扩展你的问题。 file.name 是如何初始化的?字符从哪里来?

关于javascript - 仅在 Firefox 中 encodeURIComponent() 的不同行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35202567/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com