2016-11-22 109 views
1
  • 所以我有一堆MySQL表誰的VARCHAR字段是utf8_general_ci
  • PHP的DEFAULT_CHARSET是UTF8
  • 最後,我設置的字符集爲utf8在我的HTML頭<meta charset="UTF-8">

此數據庫中的文本是用幾種不同的語言從英語寫入中文。的MySQL,PHP和HTML字符集愁楚

很多'e's都有他們的口音,他們使用時髦的語錄。

沒有絨毛,這些特殊字符全部輸出到屏幕上作爲黑色鑽石中的問號(2除外)。

通過簡單地在utf8_encode($string)所有包裹的變量是很好...再次,除了那些2.

第一個問題:爲什麼我需要使用utf8_encode如果一切都已經設置呀?

第二個問題:幾個條目使用♀和♂(它們就像那樣存儲在數據庫中)。這些顯示爲簡單的問號(無黑鑽石)。不管我對他們做什麼,他們都不會改變。我已嘗試過utf8_encode,utf8_decode,htmlspecialcharshtmlspecialchars_decode的所有可能組合。沒有。唯一的解決方案是將數據庫條目更改爲例如使用&#9792,然後沒有任何絨毛,它就會正確輸出。爲什麼?

+0

如果您的數據不是UTF-8,那麼您需要使用'utf8_encode',如果不是,則意味着鏈接中的某些內容從HTML - >瀏覽器 - >服務器 - > PHP - >數據庫連接 - >數據庫。 – tadman

+0

能否詳細說明一下?我可能錯過了什麼?這也不能解釋爲什麼這兩個男性和女性角色不工作 –

+0

你需要確保鏈中的每一步都是UTF8或什麼東西會被打破。我不確定你的問題在哪裏,但你必須仔細測試每個階段。 – tadman

回答

0

對於中文和表情符號,您需要utf8mb4而不是utf8。

對於黑色鑽石,請在this Q&A中搜索。它說

  • SELECT的連接(或SET NAMES)不是utf8mb4。解決這個問題。
  • 另外,檢查數據庫中的列是否爲CHARACTER SET utf8mb4。

因爲你似乎使用PHP是,但沒有說是否要使用mysqliPDO,我會向您推薦PHP checklist

如果您有&#9792;,那麼在某處將符號轉換爲「html實體」,或許使用PHP的htmlentities()?不要在客戶端使用任何轉換工具,它只會讓事情變得更糟。