javascript - JavaScript 中的字符/URI 编码不同步?

标签 javascript encoding utf-8

我有一个关于在 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/

相关文章:

c++ - 使用 ICU 库的 UTF-8 到 ASCII

javascript - 如何从 JavaScript 中的 AJAX 响应中提取正文 (<body>...</body>) 标签之间的片段

javascript - $(document).ready 返回 View 时不触发

javascript - Angular 8 : Create Facade Pattern for Subject-Observable design, 发布/订阅

php - AJAX,在来自服务器的 XML 文件中编码

Python - 逐字节读取UTF-8编码的字符串

mysql - 如何在powershell中以正确的编码处理文件?

perl - 如何在 Perl 中禁用隐式解码 ("upgrading")?

javascript - 为什么脚本在同一脚本中对 'element.checked' 进行评估时会有所不同,作用于具有相同结构的不同表行?

c# - 为什么在反序列化期间使用 UTF-8 进行编码比使用 ASCII 更好?