2011-05-06 79 views
1

我有一個JavaScript函數,它使用一些捕獲的參數構建一個URI片段,然後提交我的表單。轉義「/」在IE9中不起作用

實施例:

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 Exp lorer 6-8
  • 谷歌瀏覽器的9.x,11.x的(其他版本未測試)
  • 系統的Opera 10.x,11.x的(其他版本未測試)

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

,而不是像這樣:
expected result

IE9不逃避/,並把他們作爲路徑的一部分分隔頁URI。

現在的問題是:我怎樣才能讓我的URI片段在IE9中正確生成呢?

在此先感謝。

+0

什麼是HTTP頭被髮送? – drudge 2011-05-06 17:08:55

回答

3

這不是你的形式,或操作URL的一個問題。您在寫出PDF時需要發送正確的標題。

在您的php 標題(「Content-disposition:attachment; filename:comparativoCajasRegistradas.pdf」);

0

Escape函數對特殊字符進行編碼,但是:* @ - _ +。 /。 因此,將其替換在客戶端,然後將其放回服務器端。

JS

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

JAVA

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

感謝您的建議,我編輯了您的答案,以便在日期收集中替換*/*所有*出現次數,而不僅僅是第一次。另外,我使用的是Java,所以服務器端代碼將是'f2 = f2.replaceAll(「x」,「/」);'。儘管如此,這對我不起作用。 – 2011-05-06 17:59:36

+0

這是一種天真,如果你在字符串中有x?只需使用'encodeURIComponent'編碼 – 2011-05-06 18:18:22

+0

@ juan-mendes沒有URI代碼**/** – cvsguimaraes 2011-05-06 19:51:27

1

對於查詢參數值,您可能需要嘗試使用encodeURIComponent而不是escape

encodeURIComponent()函數 對URI組件進行編碼。

此函數編碼特殊的 字符。另外,它編碼 以下字符:,/?:@ & = + $#

+1

+1:逃避已被棄用,但我不認爲這是真正的問題。我認爲詹姆斯擊中了正確的點,指定了要下載的文件名。 – 2011-05-06 18:19:11

+0

Herp derp。真正。 – canon 2011-05-06 18:21:49

+0

@nihcap:但是,你仍然應該使用'encodeURIComponent()' – 2011-05-06 18:28:54