2015-01-16 32 views
-1

我存儲在服務器上的數據庫是在UTF8,utf8mb4,在PDO utf8_general_ci麻煩檢索數據

utf8_general_ci編碼

我所有的網頁都被迫在

utf8

我與db的連接是像這樣:

return new PDO('mysql:host=localhost;dbname=XXXX', 
      'XXXX', 'XXXX', array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8mb4", 
       PDO::MYSQL_ATTR_LOCAL_INFILE => true, PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION)); 

但我甚至嘗試作爲選項 「集名UTF8」

當我試圖分析我的結果集,我總是有一些文字領域的問題,如果我嘗試的命令喜歡:

  $originalEncoding = mb_detect_encoding($fieldWithProbs); 

返回到我

ASCII

,然後,如果我試圖把它與像命令轉換:

​​

它似乎並不工作,如果我再次問編碼類型仍然是ASCII。 奇怪的是,它在本地工作,但不是在db集上使用相同類型的編碼的遠程服務器上。 我該如何解決這個問題?

回答

1

ASCII是UTF8的子集。如果將ASCII轉換爲UTF8,則二進制表示保持不變。

所以沒有問題,只是有點不理解。

The Minimum Every Software Developer Must Know About Unicode and Character Sets

+0

好吧,我的小知識似乎讓我走錯了路。但我的probs是,如果我嘗試'$ var = $ fieldWithProb'它給了我一個NULL – JahStation

+0

兩件事情:mb_convert_encoding()需要三個參數,這可能是罪魁禍首。另外,如果($ var = $ field)產生null,那麼其中一個爲空。你必須var_dump來縮小問題的範圍。 –

+0

第三個參數是可選的'字符串mb_convert_encoding(字符串$ str,字符串$ to_encoding [,混合$ from_encoding = mb_internal_encoding()])'我做了幾個var_dump之前問:(我不能發現爲什麼一個問題當分配給var的數組轉換爲空值時,該數組的字段正確 – JahStation

-1

我解決使用這個問題:

  $row=array_map('utf8_encode', $row); 

做任何事情之前提取的行。 我希望它會對某些人有所幫助,我在這裏浪費了很多時間:)

問題不在於將「損壞的文本」分配給var,而是使用json_encode(),即使使用選項JSON_UNESCAPED_UNICODE我沒有解決問題。