PHP 和没有 MB-Functions 的 UTF-8 字符串函数?
PHP and UTF-8 String functions WITHOUT MB-Functions?
我尝试在 PHP 中使用 UTF-8,在我的网站上输出似乎没问题(测试时显示正确的 äöüß 等),但有一个简单的问题...当我使用 echo strlen("Ä");
它显示“2”...我读了这个主题:strlen() and UTF-8 encoding
在答案中我读到这个:
The replacement character often gets inserted when a UTF-8 decoder reads data that's not valid UTF-8 data.
我想知道,为什么我的数据不是有效的 UTF-8?因为:
- 我将所有文件保存在 "UTF-8 no BOM"
- 在第一行使用 UTF-8 header
- 我的浏览器也显示 "Encoding: UTF-8"
这是我的代码:
<?php
header("Content-Type: text/html; charset=utf-8");
$test = 'Ä';
echo strlen($test);
var_dump($test);
?>
我的问题:我可以使用带有 UTF-8 的普通 PHP-Functions 还是 必须 我使用 "mb"-函数?
如果可以使用正常的PHP-Functions,为什么在我的代码中显示 strlen() 2 而不是 1?
strlen()
默认情况下 return 字符串的长度 字节 ,而不是字符...您可以通过设置 mbstring.func_overload ini 设置告诉 PHP 到 return 字符 来自 strlen() 调用而不是......但这是全局的,并且影响了一些还有其他功能,例如 strpos()
和 substr()
(文档中的完整列表 link)
这可能会对代码中的其他地方产生严重的不利影响,特别是如果您使用的是不知道它的第 3 方库,因此不推荐这样做。
如果您知道您正在使用 UTF-8 字符串,那么最好使用 mb_*
函数......并且(当涉及到它时)设置 mbstring.func_overload
只是告诉PHP 使用 mb_*
函数作为普通字符串函数的替代 "under the hood"
我尝试在 PHP 中使用 UTF-8,在我的网站上输出似乎没问题(测试时显示正确的 äöüß 等),但有一个简单的问题...当我使用 echo strlen("Ä");
它显示“2”...我读了这个主题:strlen() and UTF-8 encoding
在答案中我读到这个:
The replacement character often gets inserted when a UTF-8 decoder reads data that's not valid UTF-8 data.
我想知道,为什么我的数据不是有效的 UTF-8?因为:
- 我将所有文件保存在 "UTF-8 no BOM"
- 在第一行使用 UTF-8 header
- 我的浏览器也显示 "Encoding: UTF-8"
这是我的代码:
<?php
header("Content-Type: text/html; charset=utf-8");
$test = 'Ä';
echo strlen($test);
var_dump($test);
?>
我的问题:我可以使用带有 UTF-8 的普通 PHP-Functions 还是 必须 我使用 "mb"-函数?
如果可以使用正常的PHP-Functions,为什么在我的代码中显示 strlen() 2 而不是 1?
strlen()
默认情况下 return 字符串的长度 字节 ,而不是字符...您可以通过设置 mbstring.func_overload ini 设置告诉 PHP 到 return 字符 来自 strlen() 调用而不是......但这是全局的,并且影响了一些还有其他功能,例如 strpos()
和 substr()
(文档中的完整列表 link)
这可能会对代码中的其他地方产生严重的不利影响,特别是如果您使用的是不知道它的第 3 方库,因此不推荐这样做。
如果您知道您正在使用 UTF-8 字符串,那么最好使用 mb_*
函数......并且(当涉及到它时)设置 mbstring.func_overload
只是告诉PHP 使用 mb_*
函数作为普通字符串函数的替代 "under the hood"