php查詢access數據庫部分中文亂碼的解決方法?

這幾天在弄一個微信公眾號的微網站,因為是二次開發,用到的是之前的access數據庫來查詢信息,但是查詢結果在顯示的時候,有部分中文是亂碼的,而且很異常,有的亂碼在刷新之後會變正常,但是總不能指望客戶點開頁面刷新了再看是吧。我起初也很納悶怎麼出怎麼個問題,於是我在網上查了很多資料,但是沒有具體的解決方法。最後,在瞎測試的時候,居然撞對了,下面我總結一下方法,以後遇到類似問題的同學可以做一下參考。

工具/原料

電腦一臺

php環境(odbc擴展)、access數據庫

方法/步驟

首先大家看一下出問題時候的界面,中文的排版這些是沒有問題的,但是總有那麼些中文是亂碼的。

php查詢access數據庫部分中文亂碼的解決方法

之前開發的時候,為了避免不必要的麻煩,我統一使用的是UTF8編碼,但是運行的結果就是如上圖。

我用mb_detect_encoding()來檢測這段新聞的主體看到底是什麼編碼的字符串,然後用iconv函數來做一個轉換,但是發現按照mb_detect_encoding打印出來的結果來進行轉換之後,結果顯示得更糟糕,後來發現這個函數本身就存在一些問題,而且要解決還必須動服務器的環境,我這還弄不了,只好作罷。

php查詢access數據庫部分中文亂碼的解決方法

php查詢access數據庫部分中文亂碼的解決方法

我想把編輯過的這段信息輸出為html實體看一下,是不是字符串本身有問題,居然發現htmlspecialchars函數輸出是空白!又再次查詢了這個函數的具體用法,終於輸出了:

php查詢access數據庫部分中文亂碼的解決方法

php查詢access數據庫部分中文亂碼的解決方法

php查詢access數據庫部分中文亂碼的解決方法

我直接從數據庫中把這段信息複製了出來,貼在了php文件中運行,居然兩個都是正常的,並沒有錯誤。以此確定問題肯定還是出在編碼上。

php查詢access數據庫部分中文亂碼的解決方法

php查詢access數據庫部分中文亂碼的解決方法

最終問題還是回到了iconv函數和文件編碼上,我把想到的編碼都做了一個轉換,但是結果還是有誤。突然我腦袋一熱:看看把這段信息的編碼從GB2312轉到GB2312試試是什麼結果呢?

php查詢access數據庫部分中文亂碼的解決方法

結果雖然並不完美,但是還是解決了大部分的問題,至少如果實在解決不到完美,起碼問題的嚴重性減少了很多。

php查詢access數據庫部分中文亂碼的解決方法

相關問題答案