mb_strtolower和utf8字符串

beh*_*z4d 34 php arrays

如您所知,我们需要使用mb_strtolower()而不是strtolower(),而我们正在使用utf-8数据:

$str = '??????';
echo strtolower($str);
----------------------
output: ?????
Run Code Online (Sandbox Code Playgroud)

这一切都去了未定义的字符,现在我使用mb_strtolower()

$str = '??????';
echo mb_strtolower($str);
----------------------
output: ?????
Run Code Online (Sandbox Code Playgroud)

现在仍然是相同的结果:

$str = '??????';
echo mb_strtolower($str,  mb_detect_encoding($str));
----------------------
output: ??????
Run Code Online (Sandbox Code Playgroud)

现在它已经修复了,所以使用mb_strtolower的方法也是使用mb_detect_encoding.

现在我的问题是我想用array_map做同样的事情:

$results_array = array_map('mb_strtolower', $results_array);
Run Code Online (Sandbox Code Playgroud)

我应该如何使用mb_strtolower()上述线?

dec*_*eze 62

解决方案是告诉mb_strtolower您的字符串编码是什么:

echo mb_strtolower($str, 'UTF-8');
Run Code Online (Sandbox Code Playgroud)

如果您不想每次都提供此参数,请为所有mb_功能设置一次:

mb_internal_encoding('UTF-8');
Run Code Online (Sandbox Code Playgroud)

然后你可以调用任何mb_函数,它将把你的字符串作为UTF-8处理:

echo mb_strtolower($str); // works without second parameter now
Run Code Online (Sandbox Code Playgroud)

mb_detect_encoding碰巧是'UTF-8'因为它检测到它,但它通常是不可靠的,因为它在概念上不可能可靠地检测任意编码的字符串.知道您的字符串编码内容并明确传递此信息.


Ber*_*rak 8

简单地说,定义自己的函数,然后调用mb_strtolowermb_detect_encoding.

$results_array = array_map(function($var) {
      return mb_strtolower($var, mb_detect_encoding($var));
}, $results_array);
Run Code Online (Sandbox Code Playgroud)

  • 使解决方案过度复杂的方法.:-P (3认同)