PHP的mb_strtolower函数给出了无效字符

3
以下代码存在问题。
var_dump($name);
$name = mb_strtolower($name);
var_dump($name);

输出结果为

string(32) "brazil and technology, São Paulo"
string(32) "brazil and technology, s�o paulo"

请问为什么我的代码中出现了无效字符ã?我做错了什么吗?

mb_detect_encoding($name) says its UTF-8
1个回答

8

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

 $name = mb_strtolower($name, "UTF-8");

如果这不起作用,确保所有步骤中传入的数据都是UTF-8,并且输出也是UTF-8。很可能你正在使用IS-8859-1数据,而strtolower操作会使其变得混乱。


谢谢,那就是问题所在。顺便说一下,它实际上是 mb_internal_encoding。请问您能告诉我是什么设置了 mb_internal_encoding 的值吗? - Jithin
@Jithin 很好的问题!手册没有提供任何信息:http://en.php.net/mb_internal_encoding 我假设它可能总是默认为ISO-8859-1,但我不确定。 - Pekka
对我来说它确实是 ISO-8859-1 编码。现在我正在传递 UTF-8 作为第二个参数。 - Jithin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接