如您所知,我们需要使用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'因为它检测到它,但它通常是不可靠的,因为它在概念上不可能可靠地检测任意编码的字符串.知道您的字符串编码内容并明确传递此信息.
简单地说,定义自己的函数,然后调用mb_strtolower用mb_detect_encoding.
$results_array = array_map(function($var) {
return mb_strtolower($var, mb_detect_encoding($var));
}, $results_array);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
22032 次 |
| 最近记录: |