Bezdepbonusu7Программирование: статьи и ответы

Вопрос

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

Автор вопроса: Francisco AlvaradoОтветов: 3

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

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

  • какие заголовки HTTP отправляются? drudge 06.05.2011

javascripturiescapingcross-browserinternet-explorer-9

Ответы

Ответ 1 · рейтинг 3 · James

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

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

Ответ 2 · рейтинг 1 · canon

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

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

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

Ответ 3 · kbtz

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

JS

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

JAVA

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

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы