【问题标题】:Escaping "/" doesn't work in IE9转义“/”在 IE9 中不起作用
【发布时间】:2011-08-20 08:32:54
【问题描述】:

我有一个 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

此 sn-p 有效,提交表单并带上 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 中提交相同的信息时,我收到以下消息:

而不是这样的:

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

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

提前致谢。

【问题讨论】:

  • 发送的 HTTP 标头是什么?

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


【解决方案1】:

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

在你的 php header("内容配置:附件;文件名:comparativoCajasRegistradas.pdf");

【讨论】:

    【解决方案2】:

    您可能想尝试使用encodeURIComponent 而不是escape 作为查询参数值。

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

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

    【讨论】:

    • +1: escape 已弃用,但我认为这不是真正的问题。我认为 James 说对了,指定了要下载的文件名。
    • @nihcap:不过,你还是应该使用encodeURIComponent()
    【解决方案3】:

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

    JS

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

    JAVA

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

    【讨论】:

    • 感谢您的建议,我编辑了您的答案以替换 all 日期中出现的 / 而不仅仅是第一个。另外,我使用的是 Java,所以服务器端代码是f2=f2.replaceAll("x", "/");。不过,这对我不起作用。
    • 这有点幼稚,如果字符串中有 x 怎么办?只需使用encodeURIComponent 进行编码
    • 是的,有。试试 encodeURIComponent()... 它不同于 encodeURI() 和 escape()。
    猜你喜欢
    • 2013-01-17
    • 2012-08-23
    • 2012-03-05
    • 2018-04-29
    • 2012-02-09
    • 2012-08-02
    • 2014-05-04
    • 2011-07-29
    • 2015-10-08
    相关资源
    最近更新 更多