60

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

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

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

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

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

4

11 に答える 11

35

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

サーバーが投稿 (または GET の実行) を受け入れる文字セットでのみ発生するエンティティを含む非表示の入力フィールドをフォームに挿入します。

例: フォームが ISO-8859-1 を提供するサーバー上にあり、フォームが UTF-8 を期待するサーバーに投稿される場合、フォームに次のような内容を挿入します。

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

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

于 2009-09-02T12:42:03.063 に答える
34

まともなブラウザで:

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

IEの場合(任意):

document.charset = 'ISO-8859-1'; // do this before submitting your non-utf8 <form>!
于 2012-08-08T11:24:42.363 に答える
6

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

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

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

于 2008-10-08T13:51:59.190 に答える
5

私はここで同じ問題を抱えています。ISO-8859-1 サーバーに投稿する必要がある UTF-8 ページがあります。

IE は ISO-8859-1 を処理できないようです。ただし、ISO-8859-15 を処理できます

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

ISO-8859-1 と ISO-8859-15 はほぼ同じなので、これでうまくいきました。

于 2011-04-12T09:36:27.840 に答える
2

サーバーにアクセスできる場合は、その処理を UTF-8 に変換します。UTF-8 以外のフォームを送信する技術は、長くて残念な話です。フォームと i18n に関するこのドキュメントは興味深いかもしれません。あなたが国際的なサポートを気にしていないように見えることは理解しています。UTF-8 データを html エンティティにいつでも変換して、Latin-1 のままにすることができます。

于 2008-09-30T21:19:55.067 に答える
1

ちょうど同じ問題が発生し、ページの文字エンコードを変更する必要のない比較的単純な解決策があります(これはお尻の痛みです)。

たとえば、サイトが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
?>
于 2010-07-23T20:48:22.533 に答える
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");
于 2012-04-09T00:16:19.550 に答える
0

accept-charset エンコーディングが content-type ヘッダーで指定されたエンコーディングと一致しない場合、Internet Explorer が混乱することを覚えているようです。あなたの例では、ドキュメントが UTF-8 として送信されていると主張していますが、ISO-8859-1 でフォームを送信したいと考えています。それらを一致させて、問題が解決するかどうかを確認してください。

于 2008-09-30T21:16:56.397 に答える
0

Microsoftは accept-charsetを知っているように見えますが、彼らのドキュメントでは、どのバージョンで動作する
かはわかりません...テストしたブラウザーのバージョンもわかりません。

于 2008-09-30T15:40:39.607 に答える
-1

古いバージョンの IE では不可能だと確信しています。accept-charset属性が考案される前は、form要素が受け入れる文字エンコーディングを指定する方法がありませんでした。ブラウザができる最善の方法は、フォームが含まれるページのエンコーディングが行うと想定することでした。

どのエンコーディングが使用されたかを知る必要があるのは少し悲しいことです。最近では、Web フレームワークがそのような詳細を目に見えないように処理し、テキスト データを Unicode 文字列としてアプリケーションに公開し、既にデコードされていることを期待しています...

于 2008-09-30T15:33:51.747 に答える
-3
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
于 2009-07-31T17:31:05.203 に答える