2016-09-22 26 views
0

嗨我有問題將特殊字符轉換爲大寫。mb_strtoupper顯示問號

隨着定期strtoupper我得到像DANIëL的東西,當應用mb_strtoupper我得到DANI?L。 下面的代碼: mb_strtoupper(RTRIM($片[1], 「」), 'UTF-8')

你要知道,我已經在輸入這個運行: 的iconv(「UTF-8 ','ISO-8859-1 // TRANSLIT',$ tr-> TD [0])

難道這是原因嗎?或者還有別的嗎?

+0

你預先設定的內部編碼?例如'mb_internal_encoding('UTF-8');'假設你正在渲染html,是內容類型的頭文件集(例如'Content-Type:text/html; charset = UTF-8')? –

+0

你可以看看mb_convert_encoding($ str,'UTF-8','Latin1');'(從latin1到utf8) –

+0

mb_internal_encoding('UTF-8');和Content-Type:text/html; charset = UTF-8)沒有什麼區別。 @Proger_Cbsk要使用而不是iconv或與mb_strtoupper? –

回答

0

試圖uppercasing一個Latin1的當轉換器預計UTF-8

一定要檢查您的字符串源的典型問題。此示例將工作,如果你的文本編輯器Latin1的pagecode工作,並在UTF-8

$str = "daniël"; //or your rtrim($pieces[1],",") 
$str = mb_convert_encoding($str,'UTF-8','Latin1'); 
echo mb_strtoupper($str, 'UTF-8'); 
//will echo DANIËL 
+0

讓它變得更糟。 –

+0

無論如何,所以原始數據來自2個XML文件。他們的編碼設置爲UTF-8,mb_detect_encoding也是這樣。 數據被放入2個數組中,並且這2個數組合併成一個數組,其中兩個數組中的名稱進行比較,然後將它們存儲在數據庫中。 在所有情況下,特殊字符都會被破壞。 那麼正確的方法是什麼? –

+0

我會調試舊的方式,即''Latin-1'網頁'字符集中每一步的'echo'數據(以便在每個utf8字符處看到éthingy)。 –