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 に答える