我有一个包含表单的页面 . 此页面的内容类型为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的编码 . 我有另一个问题about setting the encoding in server A.
11 回答
有一个简单的黑客:
在表单中插入一个隐藏的输入字段,该字段只有在您发布(或执行GET)服务器的字符集中才能接受 .
示例:如果表单位于服务于ISO-8859-1的服务器上,并且表单将发布到服务器,期望UTF-8在表单中插入如下内容:
IE将“检测”表单包含UTF-8字符,并在POST或GET时使用UTF-8 . 奇怪,但确实有效 .
有不错的浏览器:
使用IE(任何):
似乎无法做到这一点,至少目前的IE版本(6和7) .
IE支持表单属性accept-charset,但前提是它的值为'utf-8' .
解决方案是修改服务器A以为包含表单的页面生成编码“ISO-8859-1” .
我在这里遇到了同样的问题 . 我有一个需要发布到ISO-8859-1服务器的UTF-8页面 .
看起来IE无法处理ISO-8859-1 . But 它可以处理ISO-8859- 15 .
所以这对我有用,因为ISO-8859-1和ISO-8859-15几乎相同 .
如果您对服务器有任何访问权限,请将其处理转换为UTF-8 . 提交非UTF-8表格的艺术是一个漫长而令人遗憾的故事;这个document about forms and i18n可能会引起关注 . 我知道你似乎并不关心国际支持;您始终可以将UTF-8数据转换为html实体,以确保它保持Latin-1 .
刚刚遇到同样的问题,我有一个相对简单的解决方案,不需要对页面字符编码进行任何更改(这是一个痛苦的屁股) .
例如,您的站点位于utf-8中,并且您希望将表单发布到iso-8859-1中的站点 . 只需将帖子的操作更改为您网站上的页面,该页面会将发布的值从utf-8转换为iso-8859-1 .
这可以在php中轻松完成,具体如下:
对于俄罗斯符号'windows-1251'
当简单地将字符串转换为cp1251时
我很确定使用旧版本的IE是不可能的 . 在设计
accept-charset
属性之前,form
元素无法指定它们接受哪种字符编码,浏览器可以做的最好就是假设表单所在页面的编码将会执行 .您需要知道使用了哪种编码有点令人遗憾 - 现在我们希望我们的Web框架能够无形地处理这些细节,并将文本数据作为Unicode字符串暴露给应用程序,已经解码...
看起来微软知道accept-charset,但是他们的doc并没有说明它开始工作的版本......
您没有告诉您在哪个版本的浏览器中测试过它 .
我似乎记得,如果accept-charset编码与content-type标头中指定的编码不匹配,Internet Explorer会感到困惑 . 在您的示例中,您声称文档以UTF-8格式发送,但希望在ISO-8859-1中提交表单 . 尝试匹配这些,看看是否能解决您的问题 .