我正在尝试获取字符串的解码值。我注意到在我执行document.write()时,decodeURI(我不使用unescape,因为我在某处读过它已弃用),但是警报仍然显示未解码的值。
var uri = "Hello's ";
var dec = decodeURI(uri);
alert(dec);
document.write(dec);
我终于使用了以下代码并且工作正常;
var strName = $('<div/>').html("Hello's").text();
但仍然想知道为什么原始代码不起作用?这似乎是一个非常简单的用例。
答案 0 :(得分:0)
好像你误解了decodeURI()
函数的作用。
在您的示例中,uri
不包含任何编码的URI数据。 alert()
仍显示HTML实体,因为Javascript警报仅适用于纯文本。当您使用document.write()
时,浏览器会解释变量并自动解析HTML实体('
)。
例如,以下是使用您的第一个示例作为基础的JS控制台的一些示例输出:
> var test = 'Hello's';
> decodeURI(test);
< "Hello's"
您将HTML实体与URL编码字符混淆。 apostrophe
的网址编码字符实际上是%27
('
是HTML实体)。
现在,运行decodeURI()
并将unicode撇号替换为正确的URL编码版本会产生预期的输出。例如:
> var test = 'Hello%27s';
> decodeURI(test);
< "Hello's"