60

我有一个包含表单的页面。此页面以内容类型 text/html;charset=utf-8 提供。我需要使用 ISO-8859-1 字符编码将此表单提交到服务器。这可以通过 Internet Explorer 实现吗?

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

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

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

如果我将服务器 A 设置为使用字符集 ISO-8859-1 提供内容,那么一切正常,但我正在寻找一种方法来使这项工作在不更改服务器 A 编码的情况下进行。我有另一个关于在服务器 A 中设置编码的问题。

4

11 回答 11

35

有一个简单的技巧:

在表单中插入一个隐藏的输入字段,其中包含一个实体,该实体仅出现在您发布(或执行 GET)接受的服务器的字符集中。

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

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

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

于 2009-09-02T12:42:03.063 回答
34

使用不错的浏览器:

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

使用 IE(任何):

document.charset = 'ISO-8859-1'; // do this before submitting your non-utf8 <form>!
于 2012-08-08T11:24:42.363 回答
6

这似乎无法做到,至少在当前版本的 IE(6 和 7)中是无法做到的。

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

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

于 2008-10-08T13:51:59.190 回答
5

我在这里遇到了同样的问题。我有一个 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 几乎相同。

于 2011-04-12T09:36:27.840 回答
2

如果您完全可以访问服务器,请将其处理转换为 UTF-8。提交非 UTF-8 表单的艺术是一个漫长而遗憾的故事。这份关于表格和 i18n的文档可能会引起您的兴趣。我知道您似乎并不关心国际支持;您始终可以将 UTF-8 数据转换为 html 实体,以确保它保持为 Latin-1。

于 2008-09-30T21:19:55.067 回答
1

对于俄罗斯符号“windows-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");
于 2012-04-09T00:16:19.550 回答
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
?>
于 2010-07-23T20:48:22.533 回答
0

I seem to remember that Internet Explorer gets confused if the accept-charset encoding doesn't match the encoding specified in the content-type header. In your example, you claim the document is sent as UTF-8, but want form submits in ISO-8859-1. Try matching those and see if that solves your problem.

于 2008-09-30T21:16:56.397 回答
0

看起来微软知道accept-charset,但他们的文档没有说明它开始工作的版本......
您也没有说明您在哪个版本的浏览器中测试了它。

于 2008-09-30T15:40:39.607 回答
-1

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

您需要知道使用了哪种编码,这有点令人难过——现在我们希望我们的 Web 框架能够无形地处理这些细节,并将文本数据作为 Unicode 字符串公开给应用程序,已经解码......

于 2008-09-30T15:33:51.747 回答
-3
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
于 2009-07-31T17:31:05.203 回答