【问题标题】:Character/URI encoding in JavaScript getting out of sync?JavaScript 中的字符/URI 编码不同步?
【发布时间】:2023-03-07 03:23:02
【问题描述】:

我有一个关于在 JavaScript 中的 URL 中编码特殊/扩展 UTF-8 字符的问题。同样的问题适用于许多字符,例如 Registered R-circle,但我的示例使用了变音符号:

ü = UTF-8 中的 %C3%BC(从http://www.utf8-chartable.de/ 底部算起四行)

如果 url 包含表示为 UTF-8 (ü = %C3%BC) 的变音符号,并且我通过 encodeURIComponent 运行它,则 %s 是编码的,字符串现在看起来像“%25C3%25BC”并且它得到由我的系统正确处理。这很好。

url = "http://foo.com/bar.html?%C3%BC"
url = encodeURIComponent(url);
// url 现在表示为“http%3A%2F%2Ffoo.com%2Fbar.html%3F%25C3%25BC”

但是,坏处:如果预编码的字符串有一个未编码的字符,即实际的变音符号,则后编码看起来像 "%C3%BC" 并且失败,因为我相信 %s 也应该被编码.:

url = "http://foo.com/bar.html?ü"
url = encodeURIComponent(url);
// url 现在表示为“http%3A%2F%2Ffoo.com%2Fbar.html%3F%C3%BC”

我认为它失败了,因为它没有像 url 的其余部分那样彻底编码。

因此,除了一般建议或对我不知道要问的问题的回答之外,我想我想知道的是如何让原始元音变音(和所有其他特殊字符)完全编码。那是不正确的吗?

感谢您的帮助! 内特

【问题讨论】:

  • 你是双重编码。您正在使用什么样的系统?

标签: javascript encoding utf-8


【解决方案1】:

不能一次对一个 URL 进行编码。如果您已经将主机、路径、参数等连接在一起,则无法正确确定哪些字符实际需要编码,哪些字符是需要单独保留的分隔符。

构建 URL 的唯一可靠方法是连接已编码的值:

"http://foo.com/bar.html?" + encodeURIComponent("%C3%BC")

【讨论】:

    猜你喜欢
    • 2014-07-31
    • 1970-01-01
    • 2012-01-19
    • 2012-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-29
    • 1970-01-01
    相关资源
    最近更新 更多