首页 > Html > 一定要养成加meta 编码charset的好习惯
2009六月18

一定要养成加meta 编码charset的好习惯

事情是这样的,因为做程序,需要有中间页,就是一个表单拼装数据,然后自动提交。

参数内有一个是inputCharset,因为我们采用GBK编码,所以这个我就传了一个GBK,

因为我以为他们会根据这个东西来去用iconv转码,

可是有人反应,说提交过去报错。

很是郁闷,用httpwatch看了半天,把信息保存到本地,然后传给我,神奇的是我可以用他产生的表单提交,一切正常。

于是怀疑和编码有关,因为之前我看他浏览器的默认编码是UTF-8的,而我的是GBK,

我们的浏览器版本是一样的,这就不存在浏览器问题,而且,他用的是IE6,更不会出现IE8RC版的奇怪问题。

于是,给他传了一个我这面可以访问的FORM表单代码,和预料的一样,提交失败。

于是,再加上charset定义,OK,居然就这么提交了。

看来,养成在代码中加meta编码定义charset是一个好习惯啊

其定义方法为:

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

啥?你问我这个例子为啥不用gb-2312?我又不傻,万一浏览器将这也认为是一个META项,我本页的UTF-8不就失效了吗?

唉,meta,charset,我恨死你了。。

另外,搜了一下资料,传说中使用form标签的属性accept-charset是可以在不同编码的页面间提交表单

下面内容参考自:利用form的“accept-charset”在不同编码的页面间提交表单

比如,我提交表单的页面是GBK的,但是人家接收方是UTF-8的(正好和上一个例子相反)

那么如果我这么写的话:

<form method="post" action="demo.php" accept-charset="utf-8">

这样是不会有问题的大家可以尝试一下。呵呵。

当然,这个示例只适用于非IE浏览器,如果是IE的话,可能就要加上一句

<form method="post" action="demo.php" accept-charset="utf-8" onsubmit="document.charset='utf-8';">

在提交的时候,改一下自己页面的编码喽。

具体效果如下:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<head>
</head>
<body>
        <form name="demo_form" id="demo_form" method="post"  action="b.php" >
            <input type="text" value="啊啊啊" name="tex_1" />
            <input type="text" value="哦哦哦" name="tex_2" />    
            <input type="submit" value="click me " />  
        </form>
</body>

<script type="text/javascript">
   //document.demo_form.submit();
</script>

</html>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<?php
var_dump($_POST);  
?>

看出来,php文件编码为utf-8。这样提交demo.html的效果为:

demo_html效果

demo_html效果

很显然的乱码

很显然的乱码


而如果把demo.html的代码改为这样:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<head>
</head>
<body>
        <form name="demo_form" id="demo_form" method="post"  action="b.php" accept-charset="utf-8">
            <input type="text" value="啊啊啊" name="tex_1" />
            <input type="text" value="哦哦哦" name="tex_2" />    
            <input type="submit" value="click me " />  
        </form>
</body>

<script type="text/javascript">
   //document.demo_form.submit();
</script>
</html>

用CHROME看一下效果为:

很显然的不乱码

很显然的不乱码

文章作者:simaopig
本文地址:http://www.xiaoxiaozi.com/2009/06/18/876/
版权所有 © 转载时必须以链接形式注明作者和原始出处!

17 Responses to “一定要养成加meta 编码charset的好习惯”

  1. #1 bolo 回复 | 引用 Post:2009-06-18 20:37

    为什么页面是gb2132的,表单用utf-8呢?数据库是什么编码的,网站就用什么编码就方便了呗

    [回复]

  2. #2 simaopig 回复 | 引用 Post:2009-06-18 20:54

    @bolo
    呵。因为数据库也用GBK啊。
    那如果是两个系统打交道呢?人家设计的是UTF-8,可是你用的是GBK
    当然就要想办法让这不同的编码可以通信啊。呵呵。
    一般会将汉字进行urlencode编码之类的。 :grin:

    [回复]

  3. #3 bolo 回复 | 引用 Post:2009-06-18 20:57

    @simaopig
    原来如此,我以为360网站内部通讯也搞两种编码呢

    [回复]

  4. #4 粥小卜 回复 | 引用 Post:2009-06-18 23:37

    笔记哦~ 很好的学习态度 :roll:

    [回复]

  5. #5 simaopig 回复 | 引用 Post:2009-06-19 09:49

    @bolo
    没, 这个是我们和另外一家公司通迅时要用到的。
    另外,我们内部网站也可能有两种编码啊。很正常的。因为是不同部门,不同应用嘛。

    [回复]

  6. #6 simaopig 回复 | 引用 Post:2009-06-19 09:50

    @粥小卜
    找这个问题的原因用了N久。呵呵。

    [回复]

  7. #7 Showfom 回复 | 引用 Post:2009-06-19 10:42

    嗯,这个是一个好习惯 哈哈哈

    [回复]

  8. #8 荒野无灯 回复 | 引用 Post:2009-06-19 11:40

    “利用form的“accept-charset”在不同编码的页面间提交表单”,这个东东以前不知道啊,呵呵,今天又学了一招啦

    [回复]

  9. #9 simaopig 回复 | 引用 Post:2009-06-19 11:43

    @Showfom
    呵呵,好习惯是慢慢培养的。

    @荒野无灯
    我也是昨天才知道的。呵呵。

    [回复]

  10. #10 小明猪 回复 | 引用 Post:2009-06-19 15:15

    我基本都用utf8,昨天还发现如果用utf-8不行的话可以换成utf8试试

    [回复]

  11. #11 simaopig 回复 | 引用 Post:2009-06-19 15:17

    @小明猪
    呵呵,一般utf-8是没有问题的啦。utf8我倒没这么用过。改天试试。呵呵。

    应该是主要看浏览器咋解释,人家说行就行,人家说不行就不行。

    我感觉和Doctype类型也有关。 :-|

    [回复]

  12. #12 风也飘泊 回复 | 引用 Post:2009-06-19 16:59

    我一直有加…不知道他们做后台的加没加了就

    [回复]

  13. #13 simaopig 回复 | 引用 Post:2009-06-19 17:04

    @风也飘泊
    我以前一般页面都会加上,但是像这种自动跳转页面就懒得管了。。

    [回复]

  14. #14 beetea 回复 | 引用 Post:2009-12-10 22:52

    utf-8编码的文件不指明charset ,ie8会乱码,opera不会
    ie的默认编码是gb2312的吧,加上自动选择还是乱

    把文件改成ansi编码就没问题了

    [回复]

  15. #15 simaopig 回复 | 引用 Post:2009-12-10 23:03

    @beetea
    嗯。 有道理。各个浏览器默认的编码是不同的。呵呵。

    [回复]

  16. #16 荒野无灯 回复 | 引用 Post:2009-12-17 18:29

    今天又转到这篇幅日志了 :mrgreen: :mrgreen:

    [回复]

  17. #17 simaopig 回复 | 引用 Post:2009-12-17 18:36

    @荒野无灯
    呵呵,猿粪啊。。 :smile: :smile:

    [回复]

发表评论

:wink: :twisted: :roll: :oops: :mrgreen: :lol: :idea: :evil: :cry: :arrow: :?: :-| :-x :-o :-P :-D :-? :) :( :!: 8-O 8)