gpt4 book ai didi

javascript - 编码 URIcomponent 非 utf-8 字符并相应解码它们的正确方法是什么?

转载 作者:行者123 更新时间:2023-12-01 13:59:19 25 4
gpt4 key购买 nike

我有一个 Javascript 小书签,它使用 encodeURIcomponent 将当前页面的 URL 传递给服务器端,然后在服务器端使用 urldecode 获取字符回来。

问题是,当编码字符不是 utf-8(对于我的情况是 gb2312,但它可能是其他东西)时,当服务器执行 urldecode 时,解码字符变成正方形。这显然不是编码前的样子。

这是一个小书签,输入可以是任何东西,所以我不能只在 js 中定义“编码为 gb2312”,或者在 php 脚本中定义“解码为 gb2312”。

那么,是否有一种正确的方法使用 encodeURIcomponent 将字符编码与内容一起传递,然后解码可以选择正确的编码对其进行解码?

最佳答案

关于浏览器的编码,尤其是GB2312字符集,先查看以下文档(中文)

对于您的情况,%C8%B7%B6%A8 实际上是从 '\u786e\u5b9a' 的 GB2312 格式生成的。当用户直接在地址栏中输入汉字时,这通常发生在(旧版?)IE 和 FF 版本上,
或者您使用的是来自页面内容的非标准链接,它根本不执行 IRI 到 URI 编码,只是呈现二进制字符串,如 '/tag/\xc8\xb7\xb6\xa8'(douban.com 以前对标签有这种用法,现在他们使用正确的 URI 编码 UTF8)。 不太确定,因为无法在 Chrome 中重现,也许在 FF 中测试和IE,关于 bean 瓣的部分是真实的。

实际上,encodeURIComponent的正确输出应该是

> encodeURIComponent('%C8%B7%B6%A8')
"%25C8%25B7%25B6%25A8"

因此在服务器端,当未加引号的字符串包含非 ascii 字节时,您最好保留字符串原样,此处 '%C8%B7%B6%A8'

此外,您可以检查客户端以在包含 %XX 的值上再次应用 encodeURIComponent,其中 XX 大于 0x7F。不过,我不太确定这是否符合 RFC 2396。

写英文好累啊,不过还是要入乡随俗~

关于javascript - 编码 URIcomponent 非 utf-8 字符并相应解码它们的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10362138/

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