php mb_strtolower给出了无效的字符

Jit*_*hin 3 php unicode

以下代码正在创建问题.

var_dump($name);
$name = mb_strtolower($name);
var_dump($name);
Run Code Online (Sandbox Code Playgroud)

输出是

string(32) "brazil and technology, São Paulo"
string(32) "brazil and technology, s?o paulo"
Run Code Online (Sandbox Code Playgroud)

有人可以解释为什么我得到一个无效的角色ã?我在这做错了什么?

mb_detect_encoding($name) says its UTF-8
Run Code Online (Sandbox Code Playgroud)

Pek*_*ica 8

mb_strtolower()有第二个参数来指定编码.如果省略,则使用mb_internal_encoding()的返回值.尝试显式添加该参数.如果您使用的是UTF-8:

 $name = mb_strtolower($name, "UTF-8");
Run Code Online (Sandbox Code Playgroud)

如果这没有帮助,请100%确保传入数据在整个过程中的所有步骤中都是UTF-8,输出也是UTF-8.您可能正在使用IS-8859-1数据,这些数据会因strtolower操作而出现乱码.