为什么我使用 PHP 中的 strlen() 函数为同一个字符串得到两个不同的输出?

Why am I getting two different outputs for the same string with the strlen() function in PHP?

我在我的机器上使用 PHP 7.2.11 Windows 10 Home Single Language 64-bit操作系统.

我尝试了以下代码:

代码段 1

<?php
$str = 'abc[=11=]def';
echo strlen($str); // Outputs 8
?>

代码段 2

<?php
$str = "abc[=12=]def";
echo strlen($str); // Outputs 7
?>

我不明白为什么同一个函数会为同一个字符串生成两个不同的输出?有一次输出 8 ,另一次输出 7

为什么会这样?

函数strlen()是否是二进制安全和多字节安全的? PHP 手册没有在相应函数的页面上提及这些细节。

双引号转义 [=10=] 而单引号不转义。

转义字符\ 在带双引号的字符串中起作用。转义数字具有特殊功能。然而,转义零 0 告诉处理器读取后面的两个八进制字符并处理它们。由于字符串中接下来的两个字符不是八进制数字,处理器停止读取它们,并且 returns 相当于 [=13=]0,它仍然作为一个字符计数器,但在输出时什么都没有,因此你看到打印时没有任何东西代替它,但仍计入长度。

示例:

strlen( "abc[=14=]def" ); // outputs 7, prints: abcdef

strlen( "abc[=15=]0def" ); // outputs 7, prints: abcdef

strlen( "abc1def" ); // outputs 7, prints: abc1def

可以阅读更多有关 0 或其他 digits/characters here

之后的转义序列的信息