今天经理突然找我,问我mantis导出的bug记录为什么会是乱码,我糊涂了下,怎么会是乱码呢?我记得我之前尝试过导出,导出的不是乱码,但实际情况如此,解决才是正道,经过百度的帮助,我完成了乱码格式的变更,也算是今天笑笑的成就吧,另外还有个小成就就是今天我测试了overflow问题,也就是溢出问题,此处溢出不是内存溢出,而是int型溢出,所输入的数据超过了int相应的长度。
下面是我的解决过程:
1、mantis cvs乱码问题解决方案:
找到Mantis根目录下csv_export.php,进行修改:
添加函数:
function expChangeCode($str)
{
return mb_convert_encoding($str,"CP936","UTF-8");
}
然后修改:
1、将echo $t_header 改成 echo expChangeCode($t_header);
2、将echo $t_value 改成 echo expChangeCode($t_value);如找不到此句话找下面的这句话
将echo csv_escape_string($t_value); 修改成
echo expChangeCode(csv_escape_string($t_value));
3、将echo $t_function( $t_row[ $t_column ] )改成 echo expChangeCode($t_function( $t_row[ $t_column ] ));有的是 $t_row->$t_column,这个没有关系的,只要把词句放置到expChangeCode里就行
都改完毕后,试着导出一下cvs,你会发现,哈哈,我成功了。
2、mantis excel格式问题解决方案:
在mantisbt目录下,文件excel_xml_export.php中,我们看到如下一行:
header( 'Content-Disposition: attachment; filename="' . urlencode( file_clean_name( $t_export_title ) ) . '.xml"' ) ;
把 .xml 变更为 .xls ,如下:
header( 'Content-Disposition: attachment; filename="' . urlencode( file_clean_name( $t_export_title ) ) . '.xls"' ) ;
这样就解决了xml格式问题,其实mantisbt系统设置为xml是非常正确的,因为xml是标准的文件数据交换模式,避免的系统编码的差异,但是windows下,还是变成xls算了
3、附加 导出excel乱码问题,我没遇见此情况,故没有尝试过:
找到Mantis根目录下core/excel_api.php,进行修改:
将$t_ret .= utf8_encode( $t_value );改成$t_ret .= $t_value;
也就是将utf8_encode函数去掉,也可以这样改:
将$t_value = str_replace( ">", ">", $t_value );改为$t_ret = str_replace( ">", ">", $t_value );
然后将$t_ret .= utf8_encode( $t_value );这句删除或者注释掉。