0

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

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

我终于使用了下面的代码并且一切正常;

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

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

4

1 回答 1

1

您似乎误解了该decodeURI()函数的作用。

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

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

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

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

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

> var test = 'Hello%27s';
> decodeURI(test);
< "Hello's"
于 2015-03-20T01:02:46.360 回答