1

我在使用 IE8 和使用 javascript 打开新窗口并提交带有特殊字符的参数时遇到问题。

<a href="javascript:oWin('/html/de/4664286/printregistrationcontent.html?12-security question&#61;Wie hei&#223;t Ihr Lieblingsrestaurant','PRINT',800,600);" class="print">Seite drucken</a>

问题是字母“ß”(尖锐的 S)。如您所见,上面的字符串是由于反 XSS 而编码的。此链接在 FF 和 IE6 中有效,但 IE8 将 URL 参数作为字符传输,代码为 65***(不知道 exaxt 值)。在打开的窗口中,您只会看到一个正方形(因为 65000+ 的字符不可打印)。

我还尝试使用 URL 编码而不是 HTML 编码

<a href="javascript:oWin('/html/de/4664286/printregistrationcontent.html?12-security question%3DWie hei%C3%9Ft Ihr Lieblingsrestaurant','PRINT',800,600);" class="print">Seite drucken</a>

如果我在 FF 或 IE6 中单击此链接,它会按预期工作,但 IE8 将无法将“ß”传输到服务器,因此也会以错误的方式将其取回。如果我将此 url 粘贴到 IE8,它也可以工作,但如果窗口是由 javascript 打开的,则不能。

Javascript函数oWin定义如下

function oWin(url,title,sizeH,sizeV) { 
winHandle = top.open(url,title,'toolbar=no,directories=no,status=yes,scrollbars=yes,menubar=no,resizable=no,width='+sizeH+',height='+sizeV);
if(navigator.appVersion.indexOf("MSIE 3",0)==-1) id = setTimeout('winHandle.focus()',1000);
} 

如果有人知道在哪里寻找原因,请回答这个问题。

谢谢amfa

4

1 回答 1

1

并非所有浏览器都以相同的方式对 href 属性进行编码 - 这可能是您的问题。我想你会发现,如果你将代码移动到onclick属性中,它的处理方式会有所不同,并且跨浏览器会更加一致。

然而,以这种方式添加 onclick 事件不一定是好的设计 - 最好在 javascript 中而不是在属性标签本身中添加处理程序,但至少值得尝试。

<a href="javascript:oWin('/html/de/4664286/printregistrationcontent.html?12-security question&#61;Wie hei&#223;t Ihr Lieblingsrestaurant','PRINT',800,600);" 
  class="print"
  onclick="oWin('/html/de/4664286/printregistrationcontent.html?12-security question&#61;Wie hei&#223;t Ihr Lieblingsrestaurant','PRINT',800,600); return false;"
>
  Seite drucken
</a>

...确保在 onclick 处理程序中返回 false 以防止跟随 href 链接。

于 2010-03-19T14:30:56.600 回答