了解 decodeURI 的工作原理

understanding how decodeURI works

我正在尝试获取字符串的解码值。我注意到当我执行 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();

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

看来您误解了 decodeURI() 函数的作用。

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

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

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

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

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

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