2017-01-10 40 views
0

我有一個表單需要接受特殊字體字符並將它們寫入數據庫表。我相信編碼在頁面/表單級別設置正確,但是當字段寫入數據庫時​​,字符會變爲其他編碼。其他SO答案似乎表明設置編碼爲UTF-8是我所做的答案。寫入/檢索特殊字符到數據庫中

現在,如果我複製粘貼下面的字符,直接到數據庫表,它將它們保持得很好,如圖所示。它只有當我從表單寫入表格或當我檢索它在網頁中顯示時。

實施例的字符:ⓄⒼקร

該網頁被設定爲:<meta charset="utf-8">

form標籤包括屬性:accept-charset="UTF-8"

腓之前的插入件具有:$_POST['tag']=utf8_encode($_POST['tag']);

我之前沒有必須編寫/編碼這些類型的字體/特殊字符,所以我在這裏做錯了什麼?

+0

你怎麼知道它變了?你用什麼客戶端來閱讀它?客戶端上的編碼是什麼? – shmosel

+0

你檢查了你的數據庫整理嗎? –

+0

如果我複製/粘貼上述字符到表單域並提交,我會將其他ascii字符寫入表中。但是,如果我直接通過phpMyAdmin將這些相同的字符粘貼到表中,那麼他們在phpMyAdmin中編寫並正確顯示。如果通過mysqli查詢檢索顯示在網頁中,瀏覽器給我ascii或類似的。 – DMSJax

回答

1

請勿使用PHP utf8_encode()utf8_decode()函數。

儘管這些函數實際上具有很好的名稱,但它們實際上做的是破壞UTF8文本 - 通過對UTF8文本進行雙重編碼,或將文本轉換爲ISO8859-1編碼並替換Latin-1範圍之外的字符帶有問號。

刪除對utf8_encode()的呼叫,確保您的數據庫表具有正確的編碼(CHARACTER SET = utf8mb4),並且您應該沒問題。

+0

我改變了數據庫和所有表的聯合體爲'utf8mb4_general_ci',我在表單提交頁面上放置了',我將表單標籤留在了

'我註釋掉了'// $ _ POST ['tag'] = utf8_encode $ _POST ['tag']);'結果是表格獲得'âÂÂÂ在表格 – DMSJax

+0

我注意到當我看着'問一個問題'頁面結構 - 頁面不聲明字符集也沒有包含accept-charset屬性,是否有任何理由爲什麼一個或兩個這些項目可以導致它在編碼中發生錯位? – DMSJax

+0

''是'雙重編碼'。所以看到我的鏈接是以前的評論。而且,不要使用en/decode功能。 –

相關問題