为什么我们学习一开始就要用utf-8

今天,45期的同学在讨论为什么要用utf-8,而不用gbk,浏览器默认都是gbk编码,
html还好 已经讲了相应的语言设置标签,php的header标签还没讲,经常要改变浏览器编码才能正常显示中文。
header("Content-Type:text/html;charset=utf-8");

utf8和gbk相比,不仅仅是带来了更大的字符集支持,还有国际化的作用,比如用utf-8做的中文网站即使在英文系统下也不需要下载中文字库才能正常显示(大家可以搜一下utf-8和gbk相比的优点)。
或许你说这是前台的事,和我们内层php的处理没有关系,其实不然,使用utf-8 可以避免很多在php中发生的一些头疼的问题。

比如程序的兼容性
discuz的gbk版本一度不支持php5.4(不知现在2.5支持了没),因为php5.4它内置编码自 ISO-8859-1 改成了 UTF-8。
htmlspecialchars和htmlentities函数,默认会使用utf-8来处理字符串。
如果输入的字符串是GBK编码,那么很抱歉, 返回的结果是空的, 输入的字符串被吃了。
discuz大量使用htmlspecialchars做中文过滤,所以出现了很多地方没有办法中文输入出现空白。
当然这可以手动指定htmlspecialchars第三个参数

在比如php的5c问题
在gbk文件中写入如下语句,(用记事本建立php文件打入如下代码)
<?php echo("玕");?>

这个语句我们看起来是正确的,但是运行一下,你发现提示错误,为什么?
因为在GBK环境下, “玕”的编码是”0xab 0x5c, 5c 是 “\”的ascii值 他将后面的"引号转义了, 所以就语法错误


在比如一些字符分隔问题
$r = explode("|", "滕华弢|海青");
  1. var_dump($r);

我们想把这2个名字分开,但是却得不到想要的结果
因为弢字他的GBK编码值为: 8f7c, 不巧的是, “|”的ASCII值也是7c,这样我们想要的结果就得不到了,不过不想编码转来转去,获取就要考虑正则切割了

后面2个都可以用utf-8编码来避免出现这样的问题


posted on 2012-04-27 09:30  springside5  阅读(205)  评论(0编辑  收藏  举报