4 第三方组件的UTF-8导则
UTF-8是第三方组件的重要方面,以下是第三方组件的UTF-8规范。
4.1 对于现有组件的兼容性约束
如果mysql数据是UTF-8兼容的,采用utf8字符集和字典顺序,现有组件是安全的。组件安装过程总创建的表是utf字符集,除非创建表的语句指定了字符集。
不推荐在低于4.1.2版本的数据库安装现有的组件,因为这容易导致字符串截断。
现有组件的采用php字串函数可能导致字符串截断。
4.2 创建Joomla 1.5组件的导则
4.2.1 数据库表创建
为了兼容性,表创建过程不应该在xml文件中,而应该写两个sql脚本,一个是utf版本,一个是非utf-8版本,非utf-8版本中的varchar字段应该按前面所述规则进行长度扩展。
下面是就的安装xml文件:
<install>
<queries>
<query>
...query text...
</query>
<query>
...another query text...
</query>
</queries>
...
</install>
以上应该替换为如下部分
<install>
<sql>
<file driver="mysql" charset="utf8">install.utf.sql</file>
<file driver="mysql">install.nonutf.sql</file>
</sql>
</install>
以下是一个完整组件安装xml文件,注意其中的 两个安装sql脚本。
<?xml version="1.0" ?>
<install type="component">
<name>DailyMessage</name>
<creationDate>10/4/2005</creationDate>
<author>Joseph LeBlanc</author>
<copyright>This component in released under the GNU/GPL License</copyright>
<authorEmail>
为防备电子邮件地址收集器,这个 E-mail 地址被隐藏,你的浏览器必须支持 Javascript 才可看到这个邮件地址
</authorEmail>
<authorUrl>www.jlleblanc.com</authorUrl>
<version>1.0.3</version>
<files>
<filename>dailymessage.php</filename>
<filename>dailymessage.class.php</filename>
</files>
<install>
<sql>
<file driver="mysql" charset="utf8">install.utf.sql</file>
<file driver="mysql">install.nonutf.sql</file>
</sql>
</install>
<uninstall>
<sql>
<file driver="mysql" charset="utf8">uninstall.utf.sql</file>
<file driver="mysql">uninstall.nonutf.sql</file>
</sql>
</uninstall>
<installfile>
<filename>install.dailymessage.php</filename>
</installfile>
<uninstallfile>
<filename>uninstall.dailymessage.php</filename>
</uninstallfile>
<administration>
<menu>Daily Message</menu>
<submenu>
<menu act="all">Edit Messages</menu>
<menu act="configure">Configure</menu>
</submenu>
<files>
<filename>admin.dailymessage.php</filename>
<filename>admin.dailymessage.html.php</filename>
<filename>toolbar.dailymessage.php</filename>
<filename>toolbar.dailymessage.html.php</filename>
<filename>install.utf.sql</filename>
<filename>uninstall.utf.sql</filename>
<filename>install.nonutf.sql</filename>
<filename>uninstall.nonutf.sql</filename>
</files>
</administration>
</install>
4.2.2 UTF-8 字符串处理
php字符串函数应该按照前述规则替换为相应的Jstring字符串函数。