首页 文章

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

提问于
浏览
56

我有一个包含表单的页面 . 此页面的内容类型为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 回答

  • 35

    有一个简单的黑客:

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

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

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

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

  • 1

    有不错的浏览器:

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

    使用IE(任何):

    document.charset = 'ISO-8859-1'; // do this before submitting your non-utf8 <form>!
    
  • 6

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

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

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

  • 0

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

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

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

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

  • 30

    如果您对服务器有任何访问权限,请将其处理转换为UTF-8 . 提交非UTF-8表格的艺术是一个漫长而令人遗憾的故事;这个document about forms and i18n可能会引起关注 . 我知道你似乎并不关心国际支持;您始终可以将UTF-8数据转换为html实体,以确保它保持Latin-1 .

  • 2

    刚刚遇到同样的问题,我有一个相对简单的解决方案,不需要对页面字符编码进行任何更改(这是一个痛苦的屁股) .

    例如,您的站点位于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
    ?>
    
  • 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");
    
  • -2

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

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

  • 5

    看起来微软知道accept-charset,但是他们的doc并没有说明它开始工作的版本......
    您没有告诉您在哪个版本的浏览器中测试过它 .

  • 0

    我似乎记得,如果accept-charset编码与content-type标头中指定的编码不匹配,Internet Explorer会感到困惑 . 在您的示例中,您声称文档以UTF-8格式发送,但希望在ISO-8859-1中提交表单 . 尝试匹配这些,看看是否能解决您的问题 .

  • 0
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    

相关问题