Javascript “逃跑”/&引用;不';我不在IE9工作

Javascript “逃跑”/&引用;不';我不在IE9工作,javascript,cross-browser,escaping,uri,internet-explorer-9,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 s

我有一个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(其他版本未经测试)
但我也需要它在InternetExplorer9中工作。目前,当我在IE9中提交相同的信息时,我收到以下消息:

而不是像这样:

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

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


提前感谢。

转义函数对特殊字符进行编码,除了:*@-\+./。 所以,在客户端替换它,然后将其放回服务器端

JS

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

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

转义函数对特殊字符进行编码,除了:*@-\+./。 所以,在客户端替换它,然后将其放回服务器端

JS

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

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

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

在php中
标题(“内容配置:附件;文件名:comparativoCajasRegistradas.pdf”)

您的表单或操作URL没有问题。您需要在编写PDF时发送正确的标题

在php中
标题(“内容配置:附件;文件名:comparativoCajasRegistradas.pdf”)

对于查询参数值,您可能希望尝试
encodeURIComponent
而不是
escape

encodeURIComponent()函数 对URI组件进行编码

此函数编码特殊的 人物。此外,它还编码 以下字符:,/?:@& =+$#


对于查询参数值,您可能希望尝试
encodeURIComponent
而不是
escape

encodeURIComponent()函数 对URI组件进行编码

此函数编码特殊的 人物。此外,它还编码 以下字符:,/?:@& =+$#


正在发送的HTTP头是什么?正在发送的HTTP头是什么?感谢您的建议,我编辑了您的答案以替换日期中出现的所有
/
,而不仅仅是第一个。另外,我使用的是Java,所以服务器端代码应该是
f2=f2.replaceAll(“x”,“/”)。虽然,这对我来说不起作用。这有点幼稚,如果字符串中有x呢?只需使用
encodeURIComponent
编码就可以了。请尝试encodeURIComponent()。。。它与encodeURI()和escape()都不同。感谢您的建议,我编辑了您的答案以替换date reather中出现的所有
/
,而不仅仅是第一个。另外,我使用的是Java,所以服务器端代码应该是
f2=f2.replaceAll(“x”,“/”)。虽然,这对我来说不起作用。这有点幼稚,如果字符串中有x呢?只需使用
encodeURIComponent
编码就可以了。请尝试encodeURIComponent()。。。它与encodeURI()和escape()都不同。+1:escape已被弃用,但我认为这不是真正的问题。我认为James说得对,指定了要下载的文件名。@nihcap:但是,您仍然应该使用
encodeURIComponent()
+1:escape已被弃用,但我认为这不是真正的问题。我认为James说得对,指定了要下载的文件名。@nihcap:但是,您仍然应该使用
encodeURIComponent()