了解decodeURI的工作原理

时间:2015-03-19 23:46:54

标签: jquery decodeuricomponent

我正在尝试获取字符串的解码值。我注意到在我执行document.write()时,decodeURI(我不使用unescape,因为我在某处读过它已弃用),但是警报仍然显示未解码的值。

var uri = "Hello's ";
var dec = decodeURI(uri);
alert(dec);
document.write(dec);

我终于使用了以下代码并且工作正常;

var strName = $('<div/>').html("Hello&#39;s").text();

但仍然想知道为什么原始代码不起作用?这似乎是一个非常简单的用例。

1 个答案:

答案 0 :(得分:0)

好像你误解了decodeURI()函数的作用。

在您的示例中,uri不包含任何编码的URI数据。 alert()仍显示HTML实体,因为Javascript警报仅适用于纯文本。当您使用document.write()时,浏览器会解释变量并自动解析HTML实体(&#39;)。

例如,以下是使用您的第一个示例作为基础的JS控制台的一些示例输出:

> var test = 'Hello&#39;s';
> decodeURI(test);
< "Hello&#39;s"

您将HTML实体与URL编码字符混淆。 apostrophe的网址编码字符实际上是%27&#39;是HTML实体)。

现在,运行decodeURI()并将unicode撇号替换为正确的URL编码版本会产生预期的输出。例如:

> var test = 'Hello%27s';
> decodeURI(test);
< "Hello's"