今天在開發的時候需要將excel文件中數據導入到相關的配置文件中,我按照過去經常使用的方法,先將excel導出成csv文件,然後使用fgetcsv函數讀取文件的內容,通過Yii框架中的CConfigure類導出成配置文件,然後在檢查的時候發現導出的數組中有些值中間有一些多余的反斜槓,這些反斜槓一般出現在繁體中文或者日文的文字中。 一開始我先檢查了csv和excel文件中的字段,發現並沒有什麼問題,之後我查看了CConfigure類中的saveAsString函數,發現他使用了php中的var_export函數來實現導入配置文件的功能,然後,我又使用var_export輸出會出現問題的某個字段,發現確實在字符串中添加了反斜槓,而我直接使用echo或者var_dump輸出時,則沒有這個情況發生,這個時候我明白問題是出在var_export這個函數上。 在查閱了相關的資料後我發現var_export這個函數會自動轉義,也許是這個原因導致了字符串中自動添加了反斜槓,可是字符串本身並沒有特殊字符,為什麼var_export還是會添加反斜槓,這個讓我百思不得其解,我查看了出現問題的字符串的2進制編碼,發現出現反斜槓的地方本身的單個字符的ascii碼也是反斜槓,也就是說可能是var_export在轉義時針對單個反斜槓字符進行了轉義?這個原因我最後也沒有搞明白。 不過在我不知道如何解決這個問題的時候,我突然想到我的csv的文字編碼是gbk的,因為是通過excel直接轉的格式,然後我導出的文件編碼是utf-8的格式,同時我的代碼本身也是utf-8的格式,雖然我最後通過格式轉換,成功把gbk的字符串轉換成utf-8導出,但是在轉換的過程中可能會出現問題(當時想的是這樣,不過之後考慮了一下,因為之前在gbk格式下使用var_export已經出現了問題,因此應該不是轉換過程中的問題,應該是var_export處理gbk格式的漢字字符串時產生的bug?),於是我將csv文件全部轉換成utf-8格式,重新導入文件,成功解決。www.2cto.com 其實在解決的過程中,很早就想到可能是編碼的問題,但是一直沒有發現excel轉換的csv文件的格式問題,因為之前導出的配置文件沒有漢字,因此沒有出現過這一類的問題,於是就忽略了,不過最後雖然解決了問題,但是問題本身的原因還是不明,推測極有可能是因為gbk編碼和var_export的兼容導致的問題,果然開發中應該還是盡量使用utf-8統一編碼,應該會減少很多不明的錯誤。