微信模板訊息詳情頁,檢視附件時出現中文亂碼解決
阿新 • • 發佈:2018-12-18
模板訊息大家都知道 ,推送給你有的有詳情字樣,點進去可以到你伺服器一個頁面。
詳情頁面我有一個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(),反而不行,具體原因不明確,可能是內容過多吧。