2

考虑$("#"+id).val()

var field = document.getElementById( id );
/* ... */
if( field.value != "" )
    var jqxhr = $.get( "/user/ajaxtag/tag/" + $("#"+id).val(), function( data ) {
        suggestionText = data;
        //does something which i thing is non of problem's business
        var arr = getListItems( field.value );
        if ( field.value.length > 0 ){
            createList( arr );
        } else {
            clearList();
        };
        // end of non of business
    });

当在输入框中使用英文触发这段代码更改时,ajax请求响应成功,但是当使用像“س”这样的波斯语时,IE会发送这个

GET /user/ajaxtag/tag/??_=1338567574102 HTTP/1.1\r\n

(我在wireshark上得到了这个信息)并用?替换了utf8字符,当我使用firefox时不会出现问题,只在ie中(这并不奇怪哈?)我在标题中有这一行

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

在 stackoverflow.com 上的另一个问题中,有人建议更改 php.ini,但我在共享主机上并且无权访问该文件。

我做到了alert( $( "#" + id ).val() ),但警告的事情不是?是输入字符.. 就像 س

4

1 回答 1

3

您需要使用 encodeURIComponent() 函数对参数名称和值进行编码。

或使其符合 RFC3986,您可以使用此功能:

/** 
 * encodeURIComponent() function is not 100% compatible with
 * RFC3986 http://www.faqs.org/rfcs/rfc3986.html
 */
function encodeRFC3986(value) {
  return encodeURIComponent(value)
    .replace(/!/g,  "%21")
    .replace(/\*/g, "%2A")
    .replace(/\(/g, "%28")
    .replace(/\)/g, "%29")
    .replace(/'/g,  "%27");
}
于 2012-06-01T16:26:42.683 回答