2010-08-30 86 views
3

以下代碼正在創建問題。php mb_strtolower給無效字符

var_dump($name); 
$name = mb_strtolower($name); 
var_dump($name); 

輸出是

string(32) "brazil and technology, São Paulo" 
string(32) "brazil and technology, s�o paulo" 

能有人請解釋爲什麼我收到一個無效字符?我在這裏做錯了什麼?

mb_detect_encoding($name) says its UTF-8 

回答

8

mb_strtolower()具有指定編碼的第二參數。如果省略,它使用mb_internal_encoding()的返回值。嘗試明確添加該參數。如果你在UTF-8:

$name = mb_strtolower($name, "UTF-8"); 

如果沒有幫助,使100%確保輸入數據是UTF-8在沿途的所有步驟,並輸出爲UTF-8好。很可能你正在使用IS-8859-1數據,這些數據被strtolower操作弄亂了。

+0

謝謝這是問題所在。順便說一句,其實mb_internal_encoding。 你能告訴我什麼設置mb_internal_encoding值嗎? – Jithin 2010-08-30 10:52:02

+0

@Jithin好問題!手冊沒有提供任何信息:http://en.php.net/mb_internal_encoding我認爲*可能*總是默認爲ISO-8859-1,但我不確定。 – 2010-08-30 10:54:54

+0

對我來說確實是ISO-8859-1。現在我傳遞UTF-8作爲第二個參數。 – Jithin 2010-08-30 12:23:50