html - 網頁編碼




為Internet Explorer設置表單提交的字符編碼 (8)

似乎無法做到這一點,至少目前的IE版本(6和7)。

IE支持表單屬性accept-charset,但前提是它的值為'utf-8'。

解決方案是修改服務器A以為包含表單的頁面生成編碼“ISO-8859-1”。

我有一個包含表單的頁面。 此頁面的內容類型為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.

如果我將服務器A設置為使用charset ISO-8859-1提供內容,一切正常,但我正在尋找一種方法來使這項工作無需更改服務器A的編碼。 我有另一個關於在服務器A中設置編碼的問題


剛剛遇到同樣的問題,我有一個相對簡單的解決方案,不需要對頁面字符編碼進行任何更改(這是一個痛苦的屁股)。

例如,您的站點位於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
?>

對於俄羅斯符號'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");

我似乎記得,如果accept-charset編碼與content-type標頭中指定的編碼不匹配,Internet Explorer會感到困惑。 在您的示例中,您聲稱文檔以UTF-8格式發送,但希望在ISO-8859-1中提交表單。 嘗試匹配這些,看看是否能解決您的問題。


我很確定使用舊版本的IE是不可能的。 在設計accept-charset屬性之前, form元素無法指定它們接受哪種字符編碼,瀏覽器可以做的最好的事情就是假設表單所在頁面的編碼將會執行。

您需要知道使用了哪種編碼有點令人遺憾 - 現在我們希望我們的Web框架能夠無形地處理這些細節,並將文本數據作為Unicode字符串暴露給應用程序,已經解碼...


有一個簡單的黑客:

在表單中插入一個隱藏的輸入字段,該字段只有在您發布(或執行GET)服務器的字符集中才能接受。

示例:如果表單位於服務於ISO-8859-1的服務器上,並且表單將發佈到服務器,期望UTF-8在表單中插入如下內容:

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

IE將“檢測”表單包含UTF-8字符,並在POST或GET時使用UTF-8。 奇怪,但確實有效。


看起來微軟知道accept-charset ,但是他們的doc並不知道它開始工作的版本......
您沒有告訴您在哪個版本的瀏覽器中測試過它。


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




iso-8859-1