2012-08-08 81 views
0

有麻煩外國字符和表情符號來顯示。正確處理的外國字符/繪文字

編輯,以澄清

用戶類型的表情符號字符到文本字段中,然後將其發送到服務器(PHP),並保存到數據庫(MySQL的)。在顯示文本時,我們從服務器中獲取JSON編碼的字符串,並在客戶端解析並顯示該字符串。

問:作爲

%uD83C%uDFC6 

當被送回我們看不到表情符號圖片的客戶端保存在一個數據庫中的「戰利品」的表情符號的字符讀取,我們實際看到的原始編碼文本。

我們該如何獲得客戶端讀取該文本作爲一個表情符號和顯示圖像?

(全部在iphone/mobile safari上)

謝謝!

+0

而你的問題是? – hakre 2012-08-08 01:16:48

+0

你使用什麼編碼? – 2012-08-08 01:18:22

+0

@hakre對不起,混亂!我編輯了這個問題來清楚地說明我的意思。謝謝! – PotatoFro 2012-08-08 02:38:19

回答

0

一個「獎盃」字保存在數據庫中的表情符號全文%uD83C %uDFC6

然後您的數據已經被損壞。 %u轉義特定於JavaScript escape()函數,該函數通常不應使用。確保您的textarea-> PHP處理使用符合標準的編碼,例如,如果您需要將JS變量獲取到URL查詢中,請使用encodeURIComponent

然後,在你的PHP層適當的原料UTF-8字符串,你可以不用擔心使MySQL存儲字符一樣,是基本多文種平面外的表情符號。最好的方法是使用utf8mb4排序規則的列;如果不可用,請嘗試使用二進制列,這將允許您存儲任何字節序列(當它返回時將其視爲UTF-8)。然而,這樣,你不會得到不區分大小寫的比較。

+0

真棒...從escape()切換到encodeURIComponent(),一切都很好。看起來像MySQL 5.1中的「文本」數據類型正常工作。 – PotatoFro 2012-08-10 20:51:57

1

檢查由您的客戶端,Web服務器,和你的數據庫表中使用的編碼。確保他們都使用可以處理您關心的角色的編碼。

1

貌似這個問題是我的MySQL編碼... utf8mb4將允許它 - 不幸的是它的MySQL V5.5之前是不可用