为Internet Explorer设置表单提交的字符编码

Juh*_*älä 59 html forms encoding internet-explorer iso-8859-1

我有一个包含表单的页面.此页面的内容类型为text/html; charset = utf-8.我需要使用ISO-8859-1字符编码将此表单提交给服务器.这可能是Internet Explorer吗?

将accept-charset属性设置为表单元素,就像这样,适用于Firefox,Opera等,但不适用于IE.

<form accept-charset="ISO-8859-1">
  ...
</form>
Run Code Online (Sandbox Code Playgroud)

编辑:此表单由服务器A创建,并将提交给服务器B.我无法控制服务器B.

如果我将服务器A设置为使用charset ISO-8859-1提供内容,一切正常,但我正在寻找一种方法来使这项工作无需更改服务器A的编码.我有另一个关于在服务器A中设置编码的问题.

小智 35

有一个简单的黑客:

在表单中插入一个隐藏的输入字段,该字段只有在您发布(或执行GET)服务器的字符集中才能接受.

示例:如果表单位于服务于ISO-8859-1的服务器上,并且表单将发布到服务器,期望UTF-8在表单中插入如下内容:

<input name="iehack" type="hidden" value="&#9760;" />
Run Code Online (Sandbox Code Playgroud)

然后,IE将"检测"表单包含UTF-8字符,并在POST或GET时使用UTF-8.奇怪,但确实有效.

  • 这似乎不适用于相反的情况.将一个停留在utf-8页面上的表单发布到另一台服务器上的iso-8859-1页面. (7认同)

小智 32

有不错的浏览器:

<form accept-charset="ISO-8859-1" .... >
Run Code Online (Sandbox Code Playgroud)

使用IE(任何):

document.charset = 'ISO-8859-1'; // do this before submitting your non-utf8 <form>!
Run Code Online (Sandbox Code Playgroud)

  • 这似乎解决了IE问题(当在浏览器中启用JavaScript时),并且您可以通过在`form`标记中使用属性`onsubmit ="document.charset ='ISO-8859-1'"`来实现它. (5认同)

Juh*_*älä 6

似乎无法做到这一点,至少目前的IE版本(6和7).

IE支持表单属性accept-charset,但前提是它的值为'utf-8'.

解决方案是修改服务器A以为包含表单的页面生成编码"ISO-8859-1".

  • IE只能使用`accept-charset`作为'备份',因为它无法对页面自己的字符集中的字段进行编码.指定`accept-charset`,你将无法分辨使用了哪种编码.因此,它完全没用; 永远不应该使用它.确实,唯一的解决方案是更改包含表单的页面(或iframe)的字符集. (2认同)

小智 5

我在这里遇到了同样的问题.我有一个需要发布到ISO-8859-1服务器的UTF-8页面.

看起来IE无法处理ISO-8859-1.但是,它可以处理ISO-8859- 15.

<form accept-charset="ISO-8859-15">
  ...
</form>
Run Code Online (Sandbox Code Playgroud)

所以这对我有用,因为ISO-8859-1和ISO-8859-15几乎相同.


pdc*_*pdc -1

我很确定旧版本的 IE 不可能实现这一点。在设计该属性之前accept-charset,元素无法form指定它们接受哪种字符编码,浏览器所能做的最好的事情就是假设表单所在页面的编码将执行。

有点遗憾的是,您需要知道使用了哪种编码 - 如今,我们希望我们的 Web 框架能够无形地处理这些细节,并将文本数据作为已解码的 Unicode 字符串公开给应用程序......