Экранирование / не работает в IE9

У меня есть функция 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

вместо чего-то вроде этого:
ожидаемый результат

IE9 не экранирует / и не принимает их как часть разделителей путей в URI.

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

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


person Francisco Alvarado    schedule 06.05.2011    source источник
comment
какие заголовки HTTP отправляются?   -  person drudge    schedule 06.05.2011


Ответы (3)


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

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

person James    schedule 06.05.2011

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

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

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

person canon    schedule 06.05.2011
comment
+1: побег устарел, но я не думаю, что это настоящая проблема. Я думаю, что Джеймс попал в точку, указав имя файла для загрузки. - person Juan Mendes; 06.05.2011
comment
@nihcap: Однако вы все равно должны использовать encodeURIComponent() - person Juan Mendes; 06.05.2011

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

JS

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

JAVA

f2 = f2.replaceAll("x", "/");
person kbtz    schedule 06.05.2011
comment
Спасибо за ваше предложение, я отредактировал ваш ответ, заменив все вхождения / в дату, а не только первое. Кроме того, я использую Java, поэтому код на стороне сервера будет f2=f2.replaceAll("x", "/");. Хотя, это не работает для меня. - person Francisco Alvarado; 06.05.2011
comment
Это довольно наивно, а что, если в строке есть x? Просто закодируйте с помощью encodeURIComponent - person Juan Mendes; 06.05.2011
comment
Да, есть. Попробуйте encodeURIComponent()... он отличается как от encodeURI(), так и от escape(). - person canon; 10.05.2011