我尝试使用PHP的UTF-8,输出似乎还好(显示正确äöüß等,测试时)在我的网站上,但有一个简单的问题…当我使用echo strlen("Ä");
时,它显示我"2"…我读了这个主题:strlen()和UTF-8编码在回答中,我读到:
当UTF-8解码器读取非有效的UTF-8数据时,通常会插入替换字符。
我想知道,为什么我的数据不是有效的UTF-8?因为:
- 我保存了我所有的文件在"UTF-8 no BOM"
- 第一行使用UTF-8报头
- 我的浏览器也显示"Encoding: UTF-8"
这是我的代码:
<?php
header("Content-Type: text/html; charset=utf-8");
$test = 'Ä';
echo strlen($test);
var_dump($test);
?>
我的问题:我可以使用正常的php函数与UTF-8或必须我使用"mb"-函数?
如果可以使用正常的php函数,为什么在我的代码中显示strlen() 2,而不是1?
strlen()
将在默认情况下以字节返回字符串的长度,而不是字符…您可以通过设置mbstring来改变这一点。func_overload ini设置告诉PHP从strlen()调用返回字符 ....但这是全局的,并且也影响许多其他函数,如strpos()
和substr()
(完整列表在文档链接中)
这可能会在代码的其他地方产生严重的不利影响,特别是如果您使用的是不知道它的第三方库,因此不建议使用
。如果你知道你正在使用UTF-8字符串,最好使用mb_*
函数…并且(当涉及到它时)设置mbstring.func_overload
只是告诉PHP使用mb_*
函数作为普通字符串函数"under the hood"的替代