模板消息大家都知道 ,推送给你有的有详情字样,点进去可以到你服务器一个页面。
详情页面我有一个xxx.sql的文件,点开后直接就能显示内容。
不应该啊!因为上传文件时,我的编码 是UTF-8,反而出现了乱码???
可能我的微信版本低吧?不过在pc浏览器打开,就会自动分析编码,不会乱码。
接下来我将文件编码转成工ANSI或是GBK,再次测试,没有中文乱码了。得意一下。。。
可是服务器别人上传的文件编码不保证人家都是GBK啊,也有UTF-8的。这样审核经理一看就要发彪了哇!!!
于是上网搜了一下 php 如何检测文件内容的编码 ,当是utf-8的我就将其转为GBK并重新写入到文件。
有办法 ,http://php.net/manual/en/function.mb-detect-encoding.php ,
将反复测试,发现并不能很好地检测,我UTF-8还是GBK的反而给我返回是ASCII码?
最后在网上找了一个可以用,参考如下:
/**
* 检测文件编码
* @param string $file 文件路径
* @return string|null 返回 编码名 或 null
*/
function detect_encoding($file) {
$list = array('GBK', 'UTF-8', 'UTF-16LE', 'UTF-16BE', 'ISO-8859-1');
$str = file_get_contents($file);
foreach ($list as $item) {
$tmp = mb_convert_encoding($str, $item, $item);
if (md5($tmp) == md5($str)) {
return $item;
}
}
return null;
}
当然检测返回如果是utf-8,我还要转一下编码,用了这个函数可以,$str:读取的文件内容,第一个item:要转为的GBK,第二个item,原字符的编码。
mb_convert_encoding($str, $item, $item);
可以用,但用了那个iconv(),反而不行,具体原因不明确,可能是内容过多吧。