web-dev-qa-db-ja.com

ajax-charsetを変更するには?

$.post()が使用するデフォルトのエンコーディングを変更するにはどうすればよいですか?

引数はUTF-8でエンコードされています。 ISO 8859-1でエンコードするにはどうすればよいですか?

14
user897237

あなたは使うことができます:

 contentType: "application/x-javascript; charset:ISO-8859-1" 
9

以下のようにajax呼び出し中にコンテンツタイプを明示的に指定することで、デフォルトのコンテンツタイプを上書きできる場合があります。

$.ajax({
        data: parameters,
        type: "POST",
        url: ajax_url,
        timeout: 20000,
        contentType: "application/x-www-form-urlencoded;charset=ISO-8859-15",
        dataType: 'json',
        success: callback
});

また、サーバーで文字セットを指定する必要があります。

例:php

<?php header('Content-Type: text/html; charset=ISO-8859-15'); ?>

これがお役に立てば幸いです。

6
gowtham kumar

文字セットはもう変更できないようです– $.ajax docsの状態:

W3C XMLHttpRequest仕様では、文字セットは常にUTF-8であると規定されています。別の文字セットを指定しても、ブラウザがエンコーディングを変更する必要はありません。

2
Jan Molnar

XHR仕様のセクション4.5.6.4.4.3を参照してください: https://xhr.spec.whatwg.org/#the-send()-method

ContentTypeRecordが失敗せず、contentTypeRecordのパラメータ["charset"]が存在し、parameters ["charset"]がASCII大文字と小文字を区別せずに "UTF-8"と一致しない場合:

ContentTypeRecordのパラメータ["charset"]を "UTF-8"に設定します。

この仕様では、ブラウザは常にUTF-8として送信する必要があります。

ただし、fetch AP​​Iを使用することはできます。これはXHRではないため、フェッチを使用して投稿すると、エンコーディングが尊重されます。

fetch(url, {
  method: 'POST',
  headers: {
    'Content-Type': `text/plain; charset=${yourCustomEncoding}`
  },
  body
}).then(...
0
Roy Art