Экранирование "/" не работает в IE9 - PullRequest
1 голос
/ 06 мая 2011

У меня есть функция 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-документ. OK для:

  • 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.

Вопрос в следующем: Как я могу получить правильный фрагмент URI в IE9?

Заранее спасибо.

Ответы [ 3 ]

3 голосов
/ 06 мая 2011

Это не проблема с вашей формой или URL-адресом действия. Вам нужно отправить правильные заголовки, когда вы пишете PDF.

В вашем php заголовок («Расположение содержимого: вложение; имя файла: comptivoCajasRegistradas.pdf»);

1 голос
/ 06 мая 2011

Возможно, вы захотите попробовать encodeURIComponent вместо escape для значений параметров запроса.

Функция encodeURIComponent () кодирует компонент URI.

Эта функция кодирует специальные персонажи. Кроме того, он кодирует следующие символы:, /? : @ & = + $ #

0 голосов
/ 06 мая 2011

Функция Escape кодирует специальные символы, за исключением: * @ - _ +. /. Поэтому замените его на стороне клиента, а затем верните обратно на стороне сервера.

JS

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

JAVA

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