转义“/”在IE9中不起作用

时间:2011-05-06 16:59:37

标签: javascript cross-browser escaping uri internet-explorer-9

我有一个javascript函数,它使用一些捕获的参数构建一个URI片段,然后提交我的表单。

示例:

function consultResource(contextName){
    var form = document.forms[0];
    var f1 = form.thename.value;//accepts strings without special symbols
    var f2 = escape(form.thedate.value); //accepts only strings in the form 'dd/mm/yyyy'
    var action = "/"+contextName+"/CtrlComparison?name="+f1+"&date="+f2;
    form.action = action;
    form.submit();
}

生成的URI片段示例为
/MyContext/CtrlComparison?name=report01&date=06/05/2011

此代码段有效,提交表单并将PDF文档带好:

  • Firefox 3.x-4.x(未在2.x上测试)
  • Internet Explorer 6-8
  • Google Chrome 9.x-11.x(未经测试的其他版本)
  • Opera 10.x-11.x(未测试的其他版本)

但我也需要它在Internet Explorer 9中工作。目前,当我在IE9中提交相同的信息时,我收到以下消息:
real result

而不是像这样的东西:
expected result

IE9没有转义/并将它们作为URI上路径分隔符的一部分。

问题是:我怎样才能在IE9中正确生成我的URI片段?

提前致谢。

3 个答案:

答案 0 :(得分:3)

这不是您的表单或操作网址的问题。在写出PDF时,您需要发送正确的标题。

在你的PHP中 header(“Content-disposition:attachment; filename:comparativoCajasRegistradas.pdf”);

答案 1 :(得分:1)

对于查询参数值,您可能需要encodeURIComponent而不是escape

  

encodeURIComponent()函数   编码URI组件。

     

此功能编码特殊   字符。另外,它编码   以下字符:,/? :@&   = + $#

答案 2 :(得分:0)

Escape函数对特殊字符进行编码,但以下情况除外:* @ - _ +。 /。 所以在客户端替换它然后把它放回服务器端。

<强> JS

var f2 = form.thedate.value.replace(/\//g, "x");

<强> JAVA

f2 = f2.replaceAll("x", "/");