我尝试在PHP上使用UTF-8,在我的网站上输出似乎没问题(在测试时显示正确的äöüß等),但是有一个简单的问题...当我使用echo strlen("Ä");
时它显示我“2”......我读了这个主题:strlen() and UTF-8 encoding
在答案中我读到了这个:
当UTF-8解码器读取的数据不是有效的UTF-8数据时,通常会插入替换字符。
我想知道,为什么我的数据无效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?
答案 0 :(得分:3)
strlen()
将返回 bytes 中字符串的长度,而不是字符...您可以通过设置mbstring.func_overload ini设置来告诉PHP从strlen()调用返回字符 ....但这是全局的,并影响许多其他函数,例如strpos()
和substr()
(完整列表)在文档链接中)
这会对您的代码中的其他地方造成严重的不利影响,特别是如果您使用的是不了解它的第三方库,因此不建议这样做。
如果您知道自己正在使用UTF-8字符串,那么最好使用mb_*
函数...(当涉及到它时)设置mbstring.func_overload
只是告诉PHP使用mb_*
函数替代普通字符串函数“引擎盖下”