2008-09-30 71 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>! 
相关问题