2008-09-30 75 views
56

我有一個包含表單的頁面。此頁面的內容類型爲text/html; charset = utf-8。我需要使用ISO-8859-1字符編碼將此表單提交給服務器。這可能與Internet Explorer?在表單提交中爲Internet Explorer設置字符編碼

設置accept-charset屬性以形成元素,就像這樣,適用於Firefox,Opera等,但不適用於IE。

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

編輯:由服務器創建一個這種形式,將提交到服務器B.我沒有對服務器B.沒有控制

如果我設置一個服務器提供內容與字符集ISO-8859- 1一切正常,但我正在尋找一種方法來使這項工作無需更改服務器A的編碼。我有另一個問題about setting the encoding in server A.

回答

0

我非常肯定它不會與舊版本的IE。在設計accept-charset屬性之前,form元素無法指定它們接受哪種字符編碼,瀏覽器可以做的最好的方式是假定表單所在頁面的編碼將會執行。

你需要知道使用哪種編碼是有點令人傷心 - 現在我們希望我們的web框架能夠無形地照顧這些細節,並將文本數據作爲已解碼的Unicode字符串公開到應用程序中。 。

0

看起來像微軟知道accept-charset,但他們的文檔並不告訴了哪個版本,它開始工作...
你不告訴無論是在哪個瀏覽器版本,你進行了測試。

0

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

+0

我有類似的問題。應用程序以utf-8的形式提供響應,並以它指定的格式accept-charset =「utf-8」提供響應,但IE8會以錯誤的格式檢索值。 與Internet Explorer一起使用表單的最佳配置是什麼? 謝謝。 – 2009-06-22 12:30:37

2

如果您完全有權訪問服務器,請將其處理轉換爲UTF-8。提交非UTF-8格式的藝術是一個漫長而遺憾的故事;這document about forms and i18n可能是有趣的。我知道你似乎不關心國際上的支持,您始終可以將UTF-8數據轉換爲html實體以確保它保持Latin-1。

+1

我非常關心國際支持,並且我希望將我的應用程序保存在UTF-8世界中,但是此單頁需要在iso-8859-1中提交給外部服務器。 – 2008-11-21 15:32:05

6

看來,這是不可能完成的,至少不是與當前版本的IE(6和7)。

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

解決方法是修改服務器A爲包含表單的頁面生成編碼「ISO-8859-1」。

+2

IE只使用`accept-charset`作爲'備份',當它沒有對頁面自己的字符集中的字段進行編碼時。指定`accept-charset`,你將無法辨別使用哪種編碼。因此,它完全無用;它不應該被使用。唯一的解決方案實際上是更改包含表單的頁面(或iframe)的字符集。 – bobince 2010-01-07 02:33:22

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

有一個簡單的黑客這樣的:

插入的形式隱藏輸入字段僅在字符集與服務器的發佈(或者做一個GET),以接受發生的實體。

例如:如果窗體位於服務ISO-8859的服務器上和形式將發佈到服務器期待的UTF-8將是這樣的形式:

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

IE會再「檢測」表單包含UTF-8字符,並在POST或GET時使用UTF-8。奇怪,但它確實有效。

+6

這似乎不適用於相反的情況。將留在utf-8頁面上的表單發佈到其他服務器上的iso-8859-1頁面。 – MaxiWheat 2010-01-11 16:59:45

+1

對,它不會以其他方式工作。 Wenn在ISO-8859-1字符集中指定了「ÿ」這個「最高」字符,這顯然是一個UTF-8編碼。所以,IE因此認爲它是UTF-8。所以它只適用於目標字符集中字符數量較多的情況。 – acme 2010-10-19 08:41:10

+0

這解決了我的問題,當IE8和IE9不尊重accept-charset ='utf-8'時,謝謝! – 2011-12-07 16:32:12

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 
?> 
5

我在這裏得到了同樣的問題。我有一個需要發佈到ISO-8859-1服務器的UTF-8頁面。

看起來像IE無法處理ISO-8859-1。它可以處理ISO-8859- 。

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

所以這個工作對我來說,因爲ISO-8859-1和ISO-8859-15幾乎是相同的。

1

俄羅斯符號 '窗口-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"); 
30

體面的瀏覽器:

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

與IE(任何):

document.charset = 'ISO-8859-1'; // do this before submitting your non-utf8 <form>! 
相關問題