mb_strtolower和 utf8 字符串

2022-08-30 12:40:08

如您所知,我们需要使用 utf-8 数据,而不是在使用 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_strtolowermb_detect_encoding

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

$results_array = array_map('mb_strtolower', $results_array);

我应该如何使用上面的行?mb_detect_encoding


答案 1

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

echo mb_strtolower($str, 'UTF-8');

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

mb_internal_encoding('UTF-8');

然后,您可以调用任何函数,它将以 UTF-8 的形式处理您的字符串:mb_

echo mb_strtolower($str); // works without second parameter now

mb_detect_encoding碰巧返回,因为它检测到它,但它通常是不可靠的,因为从概念上讲,不可能可靠地检测任意编码的字符串。了解字符串的编码内容并显式传递此信息。'UTF-8'


答案 2

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

$results_array = array_map(function($var) {
      return mb_strtolower($var, mb_detect_encoding($var));
}, $results_array);