Thinkphp3.2.3版本中,当运行TP在Cli模式下,发生错误,而错误提示消息中的中文显示为乱码。个人觉得这应该是Thinkphp的一个bug。
追踪Bug到源代码:
在/ThinkPHP/Library/Think/Think.class.php 第300行:
源码:
exit(iconv('UTF-8','gbk',$e['message']).PHP_EOL.'FILE: '.$e['file'].'('.$e['line'].')'.PHP_EOL.$e['trace']);
这就意味着在任何情况下都会将错误消息转换成GBK编码,而UNIX|Linux下的命令行编码是UTF-8。这样就导致了乱码
修复方式:
exit((strtoupper(substr(PHP_OS, 0, 3)) === 'WIN' ? iconv('UTF-8','gbk',$e['message']) : $e['message']).PHP_EOL.'FILE: '.$e['file'].'('.$e['line'].')'.PHP_EOL.$e['trace']);
做一个简单的系统判断,判断是WIN或非WIN系统,来做字符集的转换
原文地址 http://www.hhailuo.com/?p=18110
最佳答案