在JavaScript中正确编码window.open()的href

时间:2010-03-09 14:43:52

标签: javascript cross-browser

在JavaScript中使用window.open()时,href的正确跨浏览器编码是什么?首先我使用

var href = "http://127.0.0.1:8000/etf/admin/escola/t34atividade/?pop=1&copy=1";
var win = window.open(href, name, 'height=500,width=800,resizable=yes,scrollbars=yes');

IE8打开:http://127.0.0.1:8000/etf/admin/escola/t34atividade/?pop=1©=1

FireFox打开:http://127.0.0.1:8000/etf/admin/escola/t34atividade/?pop=1&copy=1

var href = "http://127.0.0.1:8000/etf/admin/escola/t34atividade/?pop=1&copy=1";
var win = window.open(href, name, 'height=500,width=800,resizable=yes,scrollbars=yes');

IE8打开:http://127.0.0.1:8000/etf/admin/escola/t34atividade/?pop=1&copy=1

FireFox打开:http://127.0.0.1:8000/etf/admin/escola/t34atividade/?pop=1&copy=1

3 个答案:

答案 0 :(得分:2)

对于部分URI语法的URI的每一段使用Javascript“encodeURIComponent”函数(即分隔符斜杠,查询字符串的问号,参数分隔符&符号等) )。

URI编码与HTML转义相同。例如,您不会将URL中的&符号转义为&

答案 1 :(得分:1)

IE8似乎试图将查询字符串参数& copy = 1 强制转换为实体& copy; ,这是版权符号(©)。这实际上很有趣。就像微软用“帮助”来阻止用户一样。

Pointy对编码是正确的。还要注意你没有一个代码缩小器,它在一对双斜线(//)之后删除一行上的所有内容;我以前见过那些残骸页面。

答案 2 :(得分:0)

我找到的最简单的解决方案是停止使用copy作为GET参数。问题是&copy实际上是版权符号的HTML实体。 IE应用实体替换将其转换为符号,即使它是在JavaScript代码中。显然Firefox不执行实体替换。根据本博客中的评论,IE正在做的事情可能是正确的,但为了避免所有混乱我只是将我的参数重命名为clone

http://nedbatchelder.com/blog/200812/accidental_html_entities_in_urls.html