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