Апостроф (умная цитата) при поиске выдает неверный запрос Apache 400

В моем веб-приложении есть форма поиска, которая выдает ошибку неверного запроса Apache 400 при поиске с использованием апострофа (умная цитата, т.е. , а не '). Это происходит, когда кто-то копирует и вставляет из Microsoft Word (который автоматически преобразует галочки в умные кавычки).

поле поиска

Форма вызывает запрос GET, который помещает строку поиска в URL-адрес. Даже когда я кодирую строку, это вызывает эту ошибку. Что мне делать, чтобы это работало?

<script type="text/javascript">

function zend_submit_main() {

    var query = $('#search_field').val();

    if(query != '') {
        var search_field = '/query/' + escape(query);
        var url = '/search/results' + search_field + '/active-tab/contacts';
        window.location = url;
    }

    return false;
}

</script>

<form id="search_form" method="GET" onsubmit="zend_submit_main(); return false;">
    <input type="text" value="search by contact name" onFocus="if (this.value=='search by contact name') { this.value=''; }" onBlur="if (this.value=='') { this.value='search by contact name'; }" name="search_field" id="search_field" style="width:160px;" />
    <input type="submit" value="Go" />
</form>     

person Andrew    schedule 05.10.2010    source источник


Ответы (1)


Используйте encodeURIComponent вместо escape:

var search_field = '/query/' + encodeURIComponent(query);

escape не является стандартной функцией и не кодирует значение в соответствии с процентным кодированием, указанным в RFC 3986. , например, кодируется как "%u2019.

person Gumbo    schedule 05.10.2010
comment
Это случай, когда великие умы отвечают одинаково? Я как раз собирался добавить ссылку на ту же страницу: P - person Pekka; 05.10.2010
comment
@Pekka: Цвей Думме, Эйн Геданке. ;) - person Gumbo; 05.10.2010
comment
ахахаха! Тоже верная интерпретация :) - person Pekka; 05.10.2010