最近在改vtigercrm系统,财务有n多个表数据,因此导入导出功能成为了必须。但vtigercrm中导入功能对中文支持并不很好。上网查了好多,好多的解决方法都如下:
在Smarty/templates/ImportStep1.tpl中的第99行插入<option value=”GBK”>GBK</option>
<select name="format" class="small">
<!-- value must be a known format for mb_convert_encoding() -->
<option value="GBK">GBK</option> // <<插入一行
<option value="ISO-8859-1">ISO-8859-1</option>
<option value="UTF-8">UTF-8</option>
</select>
再修改modules/Import/resources/Utils.php中的第21行
我不知道这个方法对你有没有用,反正对我是没用。修改为:static $supportedFileEncoding = array('UTF-8'=>'UTF-8','ISO-8859-1'=>'ISO-8859-1');
添加了GBK的数组,smarty再引用这个的数组的值。static $supportedFileEncoding = array('UTF-8'=>'UTF-8','GBK'=>'GBK','ISO-8859-1'=>'ISO-8859-1');
对于我来说这只解决了问题的一半。只是添加了gbk这个编码选项。但还是没有解决乱码问题。最后看代码发现问题出在fgetcsv()函数身上。fgetcsv()对中文字符的支持不好。要在调用这个函数前加上setlocale()函数转化一下。
// utf-8
setlocale(LC_ALL,'en_US.UTF-8');
// 简体
setlocale(LC_ALL,'zh_CN');
在/modules/Import/readers/CSVReader.php 中,在read()和getFirstRowData()函数中调用fgetcsv()函数钱都设置了一下简体,设置完之后就没有乱码了。
我不知道这个方法对你有没有用,但确实对我有用。如果有什么更好的方法也希望大家多多分享~