2016-11-17 133 views
0

正在使用mysql和php。從mysql表讀取數據時出現奇怪的字符

在我的數據庫,我有一個像下面列的值。

Preaqueça o forno médio (180ºC). 

但是,當我檢索它使用php它顯示下面的字符串。

Preaqueu00e7a o forno mu00e9dio (180u00baC). 

字符編碼有些問題。任何想法來解決它?

+0

確保您的所有系統都使用正確的編碼(可能是UTF)? –

+0

從哪裏檢索和顯示共享代碼? – C2486

+1

你的表格配置屬於這樣的DEFAULT CHARSET = utf8 – Karthi

回答

0

我使用json_encode顯示從選擇查詢的輸出。這是造成這個問題的原因。

function my_json_encode($arr) 
{ 
     //convmap since 0x80 char codes so it takes all multibyte codes (above ASCII 127). So such characters are being "hidden" from normal json_encoding 
     array_walk_recursive($arr, function (&$item, $key) { if (is_string($item)) $item = mb_encode_numericentity($item, array (0x80, 0xffff, 0, 0xffff), 'UTF-8'); }); 
     return mb_decode_numericentity(json_encode($arr), array (0x80, 0xffff, 0, 0xffff), 'UTF-8'); 

} 

使用此函數而不是默認的json_encode.And它的工作原理。

0

你似乎有兩個問題。

ç是Mojibake爲çº是Mojibake爲º。對於這一點,你需要檢查:

可見)

  • 的字節存儲需要是UTF-8編碼。解決這個問題。
  • 當INSERT和SELECTING文本需要指定utf8或utf8mb4時的連接。解決這個問題。
  • 該列需要聲明CHARACTER SET utf8(或utf8mb4)。解決這個問題。
  • HTML應該以。

十六進制00e7看起來像ç的「Unicode編碼點」,但尚不清楚您是如何創建它的。通過做SELECT col, HEX(col) FROM ...看看得到什麼存儲

讓我們開始。還提供SHOW CREATE TABLE。 (在Test the data更多細節。)

固定變爲亂碼的問題,做了HEX後,啓動一個新的問題。 (我擔心,這個線程將獲得太亂來保持。)

相關問題