2012-11-08 160 views
23

如你所知,我們需要使用mb_strtolower()來代替,如果用strtolower(),而我們與UTF8數據的工作:mb_strtolower和UTF8字符串

$str = 'برنامه'; 
echo strtolower($str); 
---------------------- 
output: ����� 

這一切都消失了未定義的字符,現在我使用mb_strtolower()

$str = 'برنامه'; 
echo mb_strtolower($str); 
---------------------- 
output: ����� 

還是一樣的效果,現將:

$str = 'برنامه'; 
echo mb_strtolower($str, mb_detect_encoding($str)); 
---------------------- 
output: برنامه 

現在,它的固定的,所以使用mb_strtolower是路還有mb_detect_encoding。

現在我的問題是,我想要做同樣的事情array_map:

$results_array = array_map('mb_strtolower', $results_array); 

如何,我應該使用mb_detect_encoding上述行?

回答

45

解決的辦法是告訴你的mb_strtolower字符串編碼是什麼:

echo mb_strtolower($str, 'UTF-8'); 

如果你不想每次都提供此參數,爲所有mb_功能設置一次

mb_internal_encoding('UTF-8'); 

然後你可以調用任何mb_函數,它會處理你的字符串爲UTF-8:

echo mb_strtolower($str); // works without second parameter now 

mb_detect_encoding恰好會返回'UTF-8',因爲它檢測到它,但它通常不可靠,因爲在概念上不可能可靠地檢測到任意編碼的字符串。 知道你的字符串編碼是什麼,並明確傳遞這些信息。

+0

非常有幫助,謝謝 – behz4d

6

簡而言之,定義您自己的功能,然後調用mb_strtolowermb_detect_encoding

$results_array = array_map(function($var) { 
     return mb_strtolower($var, mb_detect_encoding($var)); 
}, $results_array); 
+0

這個伎倆!謝謝 – behz4d

+2

解決方案過於複雜的方法。 :-P – deceze