2010-10-05 34 views
0

我有一個搜索表單中拋出,當您搜索使用單引號(智能引號Apache的400錯誤請求錯誤我的Web應用程序,即沒有' )。當有人從Microsoft Word中複製並粘貼(會自動將刻度標記轉換爲智能引號)時,會發生這種情況。省略號(智能報價)在搜索拋出Apache的400錯誤的請求

search box

的形式使這使在搜索串中的URL的GET請求。即使我編碼字符串,它會導致此錯誤。我該怎麼做才能使這個工作?

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

回答

1

使用encodeURIComponent代替escape

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

escape不是標準的功能和根據Percent-encoding as specified by RFC 3986不編碼的值。例如編碼爲"%u2019

+0

這是一個*偉大的心靈回答一樣的情況* *我*只是*將*鏈接添加到*相同的頁面*:P – 2010-10-05 15:11:26

+0

@皮卡:Zwei Dumme,ein Gedanke。 ;) – Gumbo 2010-10-05 15:13:13

+0

ahahaha!也是一個有效的解釋:) – 2010-10-05 15:13:54