【问题标题】:Apostrophe (Smart Quote) in search throws Apache 400 Bad Request搜索中的撇号(智能引号)引发 Apache 400 错误请求
【发布时间】:2011-04-21 08:48:29
【问题描述】:

我的 Web 应用程序中有一个搜索表单,当您使用撇号(智能引号,即 而不是 '强>)。当有人从 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>     

【问题讨论】:

    标签: html apache url apostrophe


    【解决方案1】:

    使用encodeURIComponent 代替escape

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

    escape 不是标准函数,不会根据Percent-encoding as specified by RFC 3986 对值进行编码。例如 编码为"%u2019

    【讨论】:

    • 这是一个聪明人的回答都一样的例子吗?我是刚刚要添加到同一页面的链接 :P
    • @Pekka:Zwei Dumme,ein Gedanke。 ;)
    • 啊哈哈哈!也是一个有效的解释:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-07
    • 2015-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多