web-dev-qa-db-ja.com

ajax、setRequestHeader()、Content-Type、application / x-www-form-urlencodedおよびcharset

コンテンツタイプがtext/html、text/plain、またはtext/xmlではなく、application/x-www-form-urlencodedコンテンツタイプの場合、文字セットの設定方法を理解できません。

この(単純化された)JavaScriptコードを考えると:

var xhr = new XMLHttpRequest();

I しないでください明示的にエンコードを設定すると、

xhr.open('POST', 'serv.php', true);
xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');

firebugは、コンテンツタイプが「application/x-www-form-urlencoded; charset = TF-8」であることを教えてくれます。

たとえば、文字セットをISO-8859-1に設定すると、

xhr.open('POST', 'serv.php', true);
xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=ISO-8859-1');

firebug stillは、「application/x-www-form-urlencoded; charset = TF-8。」と通知します。

私が何かをしようとすると

xhr.setRequestHeader('Content-Type', 'text/plain; charset=ISO-8859-1');

次に、文字セットを尊重します。

すべての場合において、send()メソッドは次のようになります。

xhr.send('id=9&name=Yoda');

Content-Typeがx-www-form-urlencodedである場合、指定した文字セットを尊重しないのはなぜですか?

注:私はISO-8859-1を例として使用しています。私の目標は、何が起こっているのかを理解することです。

10
Fernando Basso

application/x-www-form-urlencoded mimeタイプはパラメーター(charsetなど)をサポートしていません。 HTML5仕様の このセクション を見ると、文字セットがどのように決定されているかがわかります(複雑です)。特に、セクションの下部には、MIMEタイプのパラメーターとして文字セットを指定できないという注記があります。

12
aocole