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

时间:2010-08-30 18:52:00

标签: javascript encoding utf-8

我有一个关于在JavaScript中对URL中的特殊/扩展UTF-8字符进行编码的问题。同样的问题适用于许多字符,如注册的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”

我认为它失败了,因为它的编码不如网址的其余部分。

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

感谢您的帮助! Nate

1 个答案:

答案 0 :(得分:0)

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

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

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