为表单提交Internet Explorer设置字符编码
我有一个包含表单的页面。 此页面的内容types为text / html; charset = utf-8。 我需要使用ISO-8859-1字符编码将此表单提交给服务器。 这是可能的Internet Explorer?
设置accept-charset属性来形成元素,像这样,适用于Firefox,Opera等,但不适用于IE。
<form accept-charset="ISO-8859-1"> ... </form>
编辑:这个表单是由服务器A创build的,并将提交给服务器B.我无法控制服务器B.
如果我设置服务器A服务内容与字符集ISO-8859-1一切正常,但我正在寻找一种方式,使服务器A的编码没有改变的工作。 我有另外一个关于在服务器A中设置编码的问题
这有一个简单的黑客攻击:
在表单中插入一个隐藏的input字段,只有在字符集中发生的实体设置您发布的服务器(或进行GET)才能接受。
例如:如果表单位于服务器ISO-8859-1上,表单将会发送到期待UTF-8的服务器,如下所示:
<input name="iehack" type="hidden" value="☠" />
然后,IE会“检测”表单包含UTF-8字符,并在POST或GET时使用UTF-8。 奇怪,但它确实有效。
体面的浏览器:
<form accept-charset="ISO-8859-1" .... >
用IE(任何):
document.charset = 'ISO-8859-1'; // do this before submitting your non-utf8 <form>!
看来,这是不能做到的,至less与当前版本的IE(6和7)没有关系。
IE支持表单属性accept-charset,但只有它的值是“utf-8”。
解决方法是修改服务器A为包含表单的页面生成编码“ISO-8859-1”。
我在这里也遇到了同样的问题。 我有一个UTF-8页面需要发布到ISO-8859-1服务器。
看起来像IE不能处理ISO-8859-1。 但它可以处理ISO-8859-15。
<form accept-charset="ISO-8859-15"> ... </form>
所以这对我来说很合适,因为ISO-8859-1和ISO-8859-15几乎是一样的。
如果您有权访问服务器,请将其处理转换为UTF-8。 提交非UTF-8格式的艺术是一个漫长而遗憾的故事, 这个关于forms和国际化的文件可能是有趣的。 我明白你似乎不关心国际上的支持, 您总是可以将UTF-8数据转换为html实体,以确保它保持为Latin-1。
刚刚得到同样的问题,我有一个相对简单的解决scheme,不需要任何改变页面字符编码(这是一个痛苦的屁股)。
例如,您的站点位于utf-8中,并且您想要将表单发布到iso-8859-1中的某个站点。 只需将post的操作更改为网站上的一个页面,即可将发布的值从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>
当简单地将string转换为cp1251
$string = $_POST['string']; $string = mb_convert_encoding($string, "CP1251", "UTF-8");
我相当肯定,旧版本的IE不可能。 在deviseaccept-charset
属性之前, form
元素无法指定接受哪种字符编码,浏览器能够做的最好的方式是假定表单所在页面的编码将会执行。
如果你需要知道使用哪种编码是有点难过 – 现在我们希望我们的Web框架能够隐藏这些细节,并将文本数据作为已经解码的Unicodestring显示给应用程序。
看起来像微软知道接受字符集 ,但他们的文档并不知道它开始工作的版本…
你不会告诉你在哪个版本的浏览器上testing过它。
我似乎记得,如果accept-charset编码与内容types标头中指定的编码不匹配,Internet Explorer会感到困惑。 在你的例子中,你声称文档是以UTF-8格式发送的,但是希望以ISO-8859-1格式提交。 尝试匹配这些,看看是否可以解决您的问题。
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">