1. 程式人生 > >微信模板訊息詳情頁,檢視附件時出現中文亂碼解決

微信模板訊息詳情頁,檢視附件時出現中文亂碼解決

模板訊息大家都知道 ,推送給你有的有詳情字樣,點進去可以到你伺服器一個頁面。

詳情頁面我有一個xxx.sql的檔案,點開後直接就能顯示內容。

不應該啊!因為上傳檔案時,我的編碼 是UTF-8,反而出現了亂碼???

可能我的微信版本低吧?不過在pc瀏覽器開啟,就會自動分析編碼,不會亂碼。

接下來我將檔案編碼轉成工ANSI或是GBK,再次測試,沒有中文亂碼了。得意一下。。。

可是伺服器別人上傳的檔案編碼不保證人家都是GBK啊,也有UTF-8的。這樣稽核經理一看就要發彪了哇!!!

於是上網搜了一下 php 如何檢測檔案內容的編碼 ,當是utf-8的我就將其轉為GBK並重新寫入到檔案。

將反覆測試,發現並不能很好地檢測,我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(),反而不行,具體原因不明確,可能是內容過多吧。