SEO工具、SEO教程、SEM教程、SEO培训、SEO优化、SEO服务、SEM服务等方面的资料,让大家掌握更多搜索引擎优化、网站优化等方面的知识。

2008年11月25日星期二

自动编码转换

ThinkPHP框架的文件全部采用UTF-8编码格式,UTF-8的支持和自动输出编码转换的功能让页面表现更加灵活。您可以配置输出的页面编码格式,如gb2312等(默认采用UTF-8输出)。系统根据配置文件中设置的编码格式自动对页面进行编码转换,支持iconv和mb_string两种方式,为了提高效率,如果系统的模板编码设置和输出编码设置项相同,则不会进行编码转换。ThinkPHP可以设置模板编码、输出编码和数据库编码,并自动完成转换工作,让你的应用不再受编码的苦恼。
如果你的项目编码都是UTF-8格式的,你可能无需了解ThinkPHP的自动编码转换的细节,如果你的项目里面存在个别的非UTF-8编码的情况,就需要了解TP的自动编码转换机制。首先让我们来了解下TP中有哪些编码是可以配置的,下面是惯例配置里面的一些编码设置:
代码: 复制内容到剪贴板

1. 'TEMPLATE_CHARSET' => 'utf-8', // 模板文件编码
2. 'OUTPUT_CHARSET' => 'utf-8', // 默认输出编码
3. 'DB_CHARSET' => 'utf8', // 数据库编码默认采用utf8

所以,如果以上参数都配置成utf-8的话,系统就无需进行编码转换工作,可以提高一定的效率。但是需要注意的是文件编码在使用UTF-8的时候,千万要注意BOOM的问题,因为这个隐藏的输出会导致Cookie、Session以及Header方法失效。关于BOOM的问题,可以Google下。如果使用 Editplus的话,建议在参数选择->文件里面设置文件编码为utf-8,并且总是删除签名。
上面的编码都可以配置成其他的编码格式,系统会完成自动的编码转换。不过,数据库编码的设置需要数据库的支持,有些数据库或者版本并不支持编码设置。
模板文件编码是指模板文件的文件编码 输出编码是指浏览器输出的页面编码,注意这两个不要相混淆。
如果你的模板文件编码是utf-8,而输出编码的设置是gb2312,数据库的编码是utf8(这里要注意的是数据库编码是没有utf-8的,而应该是utf8),那么系统的自动编码转换过程是:
代码: 复制内容到剪贴板

1. 从数据库中查询数据(utf8)->读取模板文件utf-8并渲染->转换成输出编码gb2312输出

另外一个需要注意的地方是,设置了输出编码后,模板文件里面最好添加meta头信息,例如:
代码: 复制内容到剪贴板

1.

如果你的模板文件编码和输出编码不一致,假设模板文件编码是utf-8,而输出编码是gb2312,但是为了不影响模板文件的预览,你可以在模板文件里面定义
代码: 复制内容到剪贴板

1.

框架模板引擎在编译的时候会自动把utf-8转换成输出编码gb2312。
系统的编码转换方法使用自带的auto_charset方法,需要iconv或者mb_string类库的支持。

没有评论:

关注者

博客归档