Javascript “编码/解码”&&引用;在URL参数中

Javascript “编码/解码”&&引用;在URL参数中,javascript,Javascript,下面是一个字符串,我正在用JavaScript使用encodeURI 原始字符串-版权=版权所有©2003 这是编码字符串-版权所有%20%C2%A9%202003 我正在通过www://abc.com?param=Copyright%20%C2%A9%202003这将依次打开一个javascript弹出窗口 但是当我在弹出页面中解码这个字符串时,在IE10中它就像“版权©2003”,而在Chrome和Firefox中它就像“版权©2003” 我理解IE无法正确显示此特殊字符©为此,我们需要使用

下面是一个字符串,我正在用JavaScript使用
encodeURI

原始字符串-版权=版权所有©2003

这是编码字符串-版权所有%20%C2%A9%202003

我正在通过
www://abc.com?param=Copyright%20%C2%A9%202003
这将依次打开一个javascript弹出窗口

但是当我在弹出页面中解码这个字符串时,在IE10中它就像“版权©2003”,而在Chrome和Firefox中它就像“版权©2003”

我理解IE无法正确显示此特殊字符©为此,我们需要使用
“©”
。但不知何故,我无法将
“©”
作为参数发送,因为它将
“©”
作为一个新参数本身,因为它以
“&
开头


你能告诉我如何使用javascript在IE中正确地编码/解码这些文本吗

对您发送的参数使用
encodeURIComponent
(另一端使用
decodeURIComponent
)以及适当的元标记(下面是更简单但仍然向后兼容且HTML5友好的方式)和文档编码。这将避开像
&
=
这样的东西,否则它们会被当作参数分隔符对待

下面是一个IE10和FF27测试演示:

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta charset="utf-8" />
</head>
<body>

<script>

var testString = '\u00a9'; // Show the copyright symbol by default
              // though you can test with "&" and "=" in here as well
var loc = window.location.href;
if (loc.indexOf('param=') === -1) { // Add the param if not present
    window.location += '?param=' + encodeURIComponent(testString);
}

// Show the symbol after the param (in a safe manner).
document.body.appendChild(document.createTextNode(
    decodeURIComponent(loc.replace(/.*?\?param=/, ''))
));
</script>

</body>
</html>

var testString='\u00a9';//默认情况下显示版权符号
//尽管您也可以在这里使用“&”和“=”进行测试
var loc=window.location.href;
if(loc.indexOf('param=')===-1){//如果不存在,则添加参数
window.location+='?param='+encodeURIComponent(testString);
}
//在参数后显示符号(以安全的方式)。
document.body.appendChild(document.createTextNode(
解码组件(位置替换(/.*?\?参数=/,“”))
));

使用HTML实体,如
©仅对转义HTML中的特殊字符有效。将其作为URL的参数发送是没有用的

您遇到的问题似乎是浏览器正在使用UTF-8编码来存储字符串,而
字符存储为2字节序列,在URL中编码为
%C2%A9
。解码URL的页面似乎没有使用UTF-8,而是将2个字节解码为2个单独的字符

只要您不告诉浏览器要使用哪个字符集,它就可以选择它认为最好的选项。Firefox和Chrome似乎更喜欢UTF-8并正确编码和解码字符串。Internet Explorer 10似乎在每个页面中选择了不同的字符集

您应该确保所有页面都有一个

<meta http-equiv="content-type" content="text/html; charset=UTF-8">


HTML标题中的标记。这通常会告诉浏览器要为字符串使用哪个字符集,并且应该解决URL中非ASCII字符的编码和解码问题。

请参见此处,一个人通常需要
encodeURIComponent
而不是
encodeURI
,例如,
&
=
在URI中是可以的,但是,如果在组件中将字符串与它们连接在一起,则会导致问题,因为它们可能会被解释为新参数。我不想对“www.abc.com”进行编码相反,我只想对参数进行编码,这就是我使用encodeURI对其进行编码的原因。然后您应该使用
encodeURIComponent
——这就是原因……这样您就不会有问题了。。。