IE ajax发送utf8字符为?

时间:2012-06-01 16:24:32

标签: javascript jquery internet-explorer utf-8

考虑$("#"+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请求会成功响应,但是当使用像“س”这样的persian时,IE会发送此

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

(我在wireshark上获得了这个信息)并用?取代了utf8字符,当我使用firefox时,问题不会发生,只在ie(不是一个惊喜ha?)我在标题中有这一行

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

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

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

1 个答案:

答案 0 :(得分: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");
}