mb_strtolower和utf8字符串

时间:2012-11-08 12:06:35

标签: php arrays

如您所知,我们在处理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

2 个答案:

答案 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);