ThinkPHP创建网站时使用UTF8编码,包括数据库操作默认情况下也使用与文件系统相同的编码。但有些第三方应用,使用的并非UTF8编码,如果在当前应用中调用,将会出现异常,例如乱码、解释错误等。事实上PHP已经内置了iconv函数用于处理字符编码,但只能处理字符串。ThinkPHP内置了CodeSwich类库,能够方便地对PHP及HTML文件进行转码,支持批量转码。转码后开发人员就可以方便地调用不同编码的类库及函数。
1、DetectAndSwitch方法
DetectAndSwitch方法可以方便地对单个PHP、HTML、JS等文件进行编码转换,DetectAndSwitch方法形式如下。
static function DetectAndSwitch($filename,$out_charset)
其中参数filename表示需要转码的有效文件;参数out_charset表示转码后的编码,接受的输出编码与iconv函数一样。如以下代码所示。
需要注意的是转码后原文件将会被替换,这就意味着在Linux系统下,Web服务器对该文件必须具备可读可写权限。
2、CodingSwitch方法
很多第三方类库都不是由单个文件构成的,而是由一系列的类库构成的。CodingSwitch方法可以实现对整个目录下的PHP或者HTML等文件进行编码转换,函数形式如下:
static function CodingSwitch($app = "./",$charset='UTF-8',$mode = "FILES",$file_types = array(".html",".php"))
其中参数app表示目录路径;参数charset表示文件转换的目标编码;参数mode表示目录遍历模式,保持默认即可;参数file_types表示文件匹配后缀名,只有匹配的文件才进行转码。CodingSwitch方法的使用非常简单,如下代码所示。