这两天,字符集处理上遇到了一些问题,翻译了一下Joomla的UTF-8规范,逐渐帖出来。
1. 概述
1.1 UTF-8简介
UTF-8是unicode字符集基础上的变长字符集,长度为1-4个字节。其中大部分语言都可以采用三个字节来表示,第四个字节仅仅用在某些特殊的多语言情况下,这种情况很少。
UTF-8正在成为一种标准,作为unicode的子集,UTF-8的好处是转换为ASCII存储的时候节省空间,互联网上大量使用7为的ASCII交换数据,因此 UTF-8编码能够节省带宽。
1.2 Joomla! UTF-8 实现
多字节字符集使用会在几个方面对Joomla影响:
首先数据库需要支持UTF-8存储。MySQL versions 4.1.2 以上版本支持UTF-8,在一个非UTF-8字符集的数据库中使用 UTF-*编码的数据,可能会导致字符串被截断。
Joomla! 与数据库之间的联系通道应该指定为UTF-8,否则可能发生编码错误。(数据驱动应该是UTF-8编码 译者)
html页面需要指定编码格式。
Joomla php 字符串相关函数需要能处理UTF-8编码,php的传统字符串函数是单字节的,而 mstring扩展并不是每台机器上都有,使用单字节的php字串函数,可能导致数据被破坏。在http://www.phpwact.org/php/i18n/utf-8可以找到可能发生的问题。
1.3 Joomla!中UTF-8 实现策略
1.3.1 安装前的检查
安装时候会检查‘mbstring’的php扩展,如果有这个扩展那么joomla将使用,如果有这个扩展,但是设置不合理来处理UTF-8,那么将会提示用户修改。
1.3.2 数据库兼容
安装时候检查数据库版本,如果支持UTF-8,那么数据库和表将以UTF-8格式创建,如果不是UTF-8,字段的长度将被扩展以避免数据截断。
1.3.3 多字节字符串函数处理
采用JString类封装字符串处理函数,如果支持‘mbstring’,那么将在JString内部采用mbstring,函数,如果不支持,将采用一个纯php的库,这个库比mbstring性能慢一些。
1.3.4 第三方组件扩展规范
第三方组件扩展规范有一些变化,这点以后讨论。