我有一个关于在 JavaScript 中对 URL 中的特殊/扩展 UTF-8 字符进行编码的问题。同样的问题适用于许多字符,例如注册的 R 圈,但我的示例使用变音符号:
ü = UTF-8 格式的 %C3%BC(从 http://www.utf8-chartable.de/ 底部开始四行)
如果 url 包含表示为 UTF-8 (ü = %C3%BC) 的元音变音,并且我通过encodeURIComponent 运行它,则 %s 被编码,该字符串现在看起来像“%25C3%25BC”,并且它得到我的系统正确处理了。这很好。
网址=“http://foo.com/bar.html?%C3%BC”
url =encodeURIComponent(url);
//url 现在表示为“http%3A%2F%2Ffoo.com%2Fbar.html%3F%25C3%25BC”
但是,坏处是:如果预编码的字符串有未编码的字符,则实际的元音变音,编码后看起来像“%C3%BC”并且失败,因为我相信%s也应该被编码.:
网址=“http://foo.com/bar.html?ü”
url =encodeURIComponent(url);
//url 现在表示为“http%3A%2F%2Ffoo.com%2Fbar.html%3F%C3%BC”
我认为它失败了,因为它的编码不如网址的其余部分彻底。
因此,除了一般建议或我不知道要问的问题的答案之外,我想我想知道的是如何让原始元音变音(以及所有其他特殊字符)完全编码。这是错误的吗?
感谢您的帮助! 内特
最佳答案
您无法一次对一个URL 进行编码。如果您已经将主机、路径、参数等连接在一起,则无法正确确定哪些字符实际需要编码以及哪些字符是需要单独保留的分隔符。
构建 URL 的唯一可靠方法是连接已编码的值:
"http://foo.com/bar.html?" + encodeURIComponent("%C3%BC")
关于javascript - JavaScript 中的字符/URI 编码不同步?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3603300/