我在运行于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手册没有在相应功能的页面上提到这些细节.
\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转义序列,或其他数字/字符这里
| 归档时间: |
|
| 查看次数: |
33 次 |
| 最近记录: |