这是我使用encodeURI
原始字符串 - copyright =版权所有©2003
这是编码的字符串 - 版权所有%20%C2%A9%202003
我正在使用www://abc.com?param=Copyright%20%C2%A9%202003
这样的链接传递此文本,而这个链接会打开一个javascript弹出窗口。
但是当我在弹出页面中解码这个字符串时,在IE10中就像“版权所有©2003”一样,在Chrome和& Firefox显示为“Copyright©2003”。
我理解IE没有正确显示这个特殊字符©,为此我们需要使用"©"
。但不知何故,我无法发送"©"
作为参数,因为它将"©"
视为新参数本身,因为它以"&"
开头
您能告诉我如何使用javascript在IE上正确编码/解码此文本。
答案 0 :(得分:1)
使用像©
这样的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标头中的标记。这通常会告诉浏览器哪个charset用于字符串,并且应该解决URL中非ASCII字符的编码和解码问题。
答案 1 :(得分:0)
对您发送的参数(以及另一端的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>