html - 文字コード - メールフォーム 文字化け




Internet Explorerのフォーム送信での文字エンコードの設定 (8)

私はフォームを含むページを持っています。 このページはコンテンツタイプtext / html; charset = utf-8で提供されます。 このフォームをISO-8859-1文字エンコーディングを使用してサーバーに提出する必要があります。 これはInternet Explorerで可能ですか?

accept-charset属性をform要素に設定すると、これはFirefox、Operaなどでは機能しますが、IEでは機能しません。

<form accept-charset="ISO-8859-1">
  ...
</form>

編集:このフォームはサーバーAによって作成され、サーバーBに送信されます。サーバーBは制御できません。

文字セットISO-8859-1でコンテンツを提供するようにサーバーAを設定すると、すべて機能しますが、サーバーAのエンコーディングを変更せずにこの作業を行う方法を探しています。 私はサーバーAでエンコーディングを設定することについて別の質問があります。


IEの現在のバージョン(6と7)ではなく、これを行うことはできないようです。

IEは、フォーム属性accept-charsetをサポートしていますが、その値が 'utf-8'の場合のみです。

解決策は、フォームを含むページのエンコーディング 'ISO-8859-1'を生成するようにサーバーAを変更することです。


Microsoftはaccept-charset認識しているaccept-charsetが、docが動作するバージョンを教えてくれません...
どちらのバージョンのブラウザでテストしたかは分かりません。


これには単純なハックがあります:

フォームに非表示の入力フィールドを挿入します。エンティティは、サーバーが送信する(またはGETを実行する)キャラクタセットでのみ発生します。

例:フォームがISO-8859-1に対応するサーバー上にあり、UTF-8が必要なサーバーにフォームが次のような形式で挿入される場合、

<input name="iehack" type="hidden" value="&#9760;" />

IEは、UTF-8文字がフォームに含まれていることを「検出」し、POSTまたはGET時にUTF-8を使用します。 奇妙だが、うまくいく。


ちょうど同じ問題を抱えていて、私はページの文字エンコーディングに変更を必要としない比較的シンプルなソリューションを持っています(お尻の痛みです)。

たとえば、サイトがutf-8で、iso-8859-1でサイトにフォームを投稿したいとします。 あなたのサイトのページに投稿のアクションを変更して、投稿された値をutf-8からiso-8859-1に変換します。

これはPHPで簡単に以下のようにすることができます:

<?php
$params = array();
foreach($_POST as $key=>$value) {
    $params[] = $key."=".rawurlencode(utf8_decode($value));
}
$params = implode("&",$params);

//then you redirect to the final page in iso-8859-1
?>

サーバへのアクセス権があれば、その処理をUTF-8に変換してください。 UTF-8以外のフォームを提出する術は長くて残念な話です。 フォームとi18nに関するこの文書は興味深いかもしれません。 私はあなたが国際的なサポートに気をつけていないと思っています。 UTF-8データを常にhtmlエンティティーに変換してLatin-1のままにすることができます。


ロシアのシンボル 'windows-1251'

<form action="yourProcessPage.php" method="POST" accept-charset="utf-8">
<input name="string" value="string" />
...
</form>

単純に文字列をcp1251に変換すると

$string = $_POST['string'];
$string = mb_convert_encoding($string, "CP1251", "UTF-8");

私はそれがIEの古いバージョンでは不可能であると確信しています。 accept-charset属性が考案される前に、 form要素がどの文字エンコーディングを受け入れるかを指定する方法はなく、ブラウザが行うことができる最良の方法は、フォームが行うページのエンコーディングを前提としています。

あなたがどのエンコーディングが使われているかを知る必要があるのはちょっと悲しいことです - 今日、私たちのWebフレームワークがそのような詳細を目に見えないように扱い、テキストデータをUnicode文字列として公開しています。


<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">




iso-8859-1