0

我尝试将 UTF-8 与 PHP 一起使用,我的站点上的输出似乎还可以(在测试时显示正确的 äöüß 等),但有一个简单的问题......当我使用它时echo strlen("Ä");,它显示“2”......我读了本主题:strlen() 和 UTF-8 编码 在我读到的答案中:

当 UTF-8 解码器读取不是有效 UTF-8 数据的数据时,通常会插入替换字符。

我想知道,为什么我的数据不是有效的 UTF-8?因为:

  • 我将所有文件保存在“UTF-8 no BOM”中
  • 在第一行使用 UTF-8 标头
  • 我的浏览器还显示“编码:UTF-8”

这是我的代码:

<?php
header("Content-Type: text/html; charset=utf-8");

$test = 'Ä';
echo strlen($test);
var_dump($test);

?>

我的问题:我可以使用带有 UTF-8 的普通 PHP 函数还是必须使用“mb”函数?

如果可以使用普通的 PHP 函数,为什么在我的代码中显示 strlen() 2 而不是 1?

4

1 回答 1

3

strlen()默认情况下将返回以字节为单位的字符串长度,而不是字符...您可以通过设置mbstring.func_overload ini 设置来更改此设置,以告诉 PHP 从 strlen() 调用返回字符...。但这是全局的, 并影响许多其他功能,例如strpos()substr()(文档链接中的完整列表)

这可能会在代码的其他地方产生严重的不利影响,特别是如果您使用不知道它的 3rd 方库,因此不建议这样做。

mb_*如果你知道你正在使用 UTF-8 字符串,那么最好使用这些函数......并且(当涉及到它时)设置mbstring.func_overload只是告诉 PHP 使用mb_*函数作为正常字符串函数的替代“在兜帽”

于 2015-07-14T10:11:33.857 回答