Подтвердить что ты не робот

Запрос параметра Losing Plus Sign

Я редактирую форму поиска и пытаюсь защитить от специальных символов в базе данных. В форме поиска JSP выпадающий список (многосегментный) позволяет пользователям выбирать описания, которые будут использоваться в запросе (примечание: описания - список строк):

<select id="descriptionSelect" multiple="multiple">
    <c:forEach items="${descriptions}" var="description">
        <option value="${fn:escapeXml(description)}")}">                            
            <c:out value="${description}" />
        </option>
    </c:forEach>
</select>

Когда форма отправляется, страница динамически генерирует URL-адрес, который принимает параметры запроса в URL-адресе (уродливые, я знаю, руки связаны). Здесь снайпер делает сегмент описания.

var descriptionSelectBox = document.getElementById("descriptionSelect");
var descriptionsUrlAddition = "";

for (var i = 0; i < descriptionSelectBox.options.length; i++) {
    if (descriptionSelectBox.options[i].selected) {
        descriptionsUrlAddition += "&descriptions=" + escape(descriptionSelectBox.options[i].value);
    }
}

У меня есть тестовая запись в базе данных, описание которой:

AAA `~! @# $% ^ & *() _ + - = {} | [] \:"; '< > ?,./И, похоже, это имеет множество специальных символов.

С кодом выше, по какой-то причине, когда запрос попадает на контроллер, описание теряет знак + (он становится просто пробелом).

Кто-нибудь знает, что может произойти и как это исправить? Я не уверен, что это связано с особым использованием URL +, или что. Я мог бы отредактировать, как заполняется список описаний (возможно, избегая там). Если вы предлагаете это в качестве предложения, используйте специальный код Java (нет классов Apache escape utils и т.д.).

Если это помогает, использование предупреждений в JavaScript указывает, что знак + не преобразуется перед отправкой запроса.

4b9b3361

Ответ 1

+ означает "пробел" в URL-адресах. Замените его на %2B. Вы могли бы это сделать сразу после составления descriptionsUrlAddition, например.

descriptionsUrlAddition = descriptionsUrlAddition.replace('+', '%2B');

Ответ 2

Вы должны использовать в передней части функцию javascript encodeuri для кодирования ваших параметров.