2012-11-08 111 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