为什么我使用 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
之后的转义序列的信息
我在我的机器上使用 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
之后的转义序列的信息