因此,我已經在此係統上構建了相當長的一段時間,並且它正在向Web瀏覽器輸出Latin1(ISO-8859-1),這是組件:更改MySQL中的字符編碼,PHP腳本,HTML
MySQL的 - 所有數據都存儲在latin1字符集
PHP - 所有PHP文本文件存儲在磁盤上以latin1編碼
HTML - 輸出有HTTP的當量=「內容類型「content =」text/html; charset = iso-8859-1「meta tag
因此,我試圖瞭解不同部分的編碼如何在我的工作流程中發揮作用。如果我打開一個PHP腳本並在文本編輯器中將其編碼更改爲UTF-8並將其保存回磁盤並重新加載Web瀏覽器,則文本全部混亂 - 除非文本來自數據庫。如果我將數據庫的編碼更改爲UTF-8並將PHP文件保存爲latin1,則必須使用utf8_decode()才能正確顯示數據。如果我更改HTML代碼,瀏覽器將錯誤地讀取它。
所以是的,我意識到如果我想「升級」到UTF8,我必須更新這個設置的所有三個部分才能正常工作,但是因爲它是一個包含大約180k行PHP代碼的龐大系統,數百萬個數據庫/表格中的帖子,我不想在沒有正確理解所有內容的情況下開始這樣的事情。
我還沒有想過什麼?除了修復之外,有什麼可能讓這個問題變得糟什麼是更改整個MySQL安裝的編碼的過程,以及更改磁盤上數百或數千個PHP文件的編碼的最簡單方法是什麼?
meta標記幸運的是動態添加,所以我會改變這種只在一個地方:)
讓我聽到這個您的經驗。
數據庫 - 檢查,客戶端編碼 - 你的意思是當通過PHP與MySQL服務器連接時?元標記 - 檢查,PHP文件 - 檢查,PHP函數...呃,好的。雖然我不使用strlen和substr,那麼$ str [index]是什麼?你的意思是,當寫一個UTF8編碼的PHP文件時,我不能寫<? print $ foo [「Översrift」]?>假定字符串以UTF8數據的形式發送到PHP解釋器,並且保存的索引數據應該是相同的,不是? – Sandman 2010-06-07 11:06:28
只要沒有來自別處的數據,$ foo [「Översrift」]將繼續工作,前提是所有文件都轉換爲utf-8。 – Wrikken 2010-06-07 16:07:32
@Sandman是的,我的意思是當通過PHP與MySQL服務器連接時。我的意思是'$ str [index]'就像'$ str [0]'(索引是一個整數)。例如,你不能使用'$ str [0]'獲取第一個字符,因爲UTF-8是一個多字節編碼;如果第一個字符佔用超過1個字節(所有非ASCII字符都是這種情況),則$ str [0]將僅獲得該字符的第一個字節。還有其他許多情況 - 大部分對字符串進行操作的函數都必須進行修改。 – Artefacto 2010-06-07 23:31:16