如您所知,我们在处理utf-8数据时需要使用mb_strtolower()
而不是strtolower()
:
$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
?
答案 0 :(得分:59)
解决方案是告诉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'
因为它检测到了它,但它通常是不可靠的,因为从概念上讲,它无法可靠地检测到任意编码的字符串。 了解您的字符串编码内容并明确传递此信息。
答案 1 :(得分:8)
简单地说,定义您自己的函数,然后使用mb_strtolower
调用mb_detect_encoding
。
$results_array = array_map(function($var) {
return mb_strtolower($var, mb_detect_encoding($var));
}, $results_array);