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

PHP*_*Nut -3 php strlen

我在运行于Windows 10 Home Single Language 64位操作系统的机器上使用PHP 7.2.11.

我试过以下代码:

第1号代码片段

<?php
$str = 'abc\0def';
echo strlen($str); // Outputs 8
?>
Run Code Online (Sandbox Code Playgroud)

代码片段2

<?php
$str = "abc\0def";
echo strlen($str); // Outputs 7
?>
Run Code Online (Sandbox Code Playgroud)

我不明白为什么同一个函数为同一个字符串产生两个不同的输出?有一次它提供输出8和另一次7

为什么这样?

功能strlen()是二进制安全还是多字节安全?PHP手册没有在相应功能的页面上提到这些细节.

Ice*_*e76 5

\0单引号没有双引号转义.

转义字符\在带双引号的字符串中工作.转义数字具有特殊功能.但是,转义零,0告诉处理器读取以下两个八进制字符并处理它们.由于字符串中的下两个字符不是八进制数字,处理器会停止读取它们,并返回相当于的\000字符,它仍然作为字符计数器但输出时没有任何内容,因此在打印时没有看到任何内容但仍然计入长度.

例子:

strlen( "abc\0def" ); // outputs 7, prints: abcdef

strlen( "abc\000def" ); // outputs 7, prints: abcdef

strlen( "abc\061def" ); // outputs 7, prints: abc1def

更可以读取关于以下0转义序列,或其他数字/字符这里

  • 同样,如果您转义字符串中的字符,您可能会在其他语言中遇到同样的问题. (2认同)