none
Formからcharsetの違うデータを送信する方法 RRS feed

  • 質問

  • みなさん、はじめまして。

    HTMLのformでサーバーにデータを送信しようとしています。

    HTML自体はUTF-8なのですが、サーバーに送信するデータはShift_JISでなければなりません。

    いろいろ検索した結果、

     <form method="post" action="xxx" name="xxx" accept-charset="Shift_JIS">

    とaccept-charsetを入れるとIE以外では問題解決しました。さらに調べるとIEはaccept-charsetは効かない(無視する)

    みたいな記述があり、

     <button type="submit" name="xxx" value="xxx" onClick="document.charset="Shift_JIS"">

    と onClick="document.charset" を入れることで解決できるとありましたので実行してみましたが解決には至っていません。

    IEだけが出来ないという点が納得いきません。

    どなたか同じ経験があるか、解決方法がわかる方はいらっしゃいますでしょうか?

    詳しい情報や、足りない情報があればお聞かせいただけるとありがたいです。

    よろしくお願いいたします。

    2017年5月18日 5:30

回答

  • IEとしてもaccept-charsetは受け付けているそうです。ただし、予想の少し上をいく仕様で

    If the user enters characters that are not in the character set of the document containing the form, the UTF-8 character set is used. UTF-8 is the preferred format for multilingual text. Refer to Character Set Recognition for a complete list of recognized character sets.

    とあり、

    • Webサーバーから送信されてきたドキュメントエンコーディングで表現できない文字をユーザーが入力した際の振る舞いを目的としている
    • UTF-8とUNKNOWNのみを受け付ける
    • 他にも受け付けるようなことを書いているがなぜかUTF-8の項目の中で、並列ではない

    なので、ドキュメントがUTF-8の場合、全ての文字を表現できてしまうのでaccept-charsetがほとんど役に立たないようです。

    ちなみに onClick="document.charset="Shift_JIS"" はダブルクォート内にダブルクォートが含まれてしまっているためにHTMLとして矛盾しています。HTMLもJavaScriptも"と'の両方を受け付けているので

    • onClick="document.charset='Shift_JIS'"
    • onClick='document.charset="Shift_JIS"'

    のどちらかにすべきです。

    2017年5月18日 8:14

すべての返信

  • OS と IE のバージョンは何でしょう? (IE のことを質問しているのですから IE のバージョンぐらいは書くのが当たり前だと私は思うのですが・・・)
    2017年5月18日 7:28
  • IEとしてもaccept-charsetは受け付けているそうです。ただし、予想の少し上をいく仕様で

    If the user enters characters that are not in the character set of the document containing the form, the UTF-8 character set is used. UTF-8 is the preferred format for multilingual text. Refer to Character Set Recognition for a complete list of recognized character sets.

    とあり、

    • Webサーバーから送信されてきたドキュメントエンコーディングで表現できない文字をユーザーが入力した際の振る舞いを目的としている
    • UTF-8とUNKNOWNのみを受け付ける
    • 他にも受け付けるようなことを書いているがなぜかUTF-8の項目の中で、並列ではない

    なので、ドキュメントがUTF-8の場合、全ての文字を表現できてしまうのでaccept-charsetがほとんど役に立たないようです。

    ちなみに onClick="document.charset="Shift_JIS"" はダブルクォート内にダブルクォートが含まれてしまっているためにHTMLとして矛盾しています。HTMLもJavaScriptも"と'の両方を受け付けているので

    • onClick="document.charset='Shift_JIS'"
    • onClick='document.charset="Shift_JIS"'

    のどちらかにすべきです。

    2017年5月18日 8:14