关于php的字符串在“\ 0”和“”?

时间:2015-08-28 04:19:01

标签: php

<?php
    $str1 = "";                    
    $str2 = "\0";                  
    var_dump(ord($str1), ord($str2));
    var_dump(strlen($str1), strlen($str2), $str1 === $str2);
    debug_zval_dump($str1, $str2);
?>

结果:

<小时/>   INT(0)
  INT(0)
  INT(0)
  INT(1)
  布尔(假)
  string(0)“”refcount(2)
  string(1)“”refcount(2)

为什么结果不一致? 这就是为什么?
谁能回答我.3Q~

2 个答案:

答案 0 :(得分:1)

看起来正确,ord()期望传递一个字符,并且因为你传递一个空字符串,它只是假定一个NULL字符(\ 0)。 Php字符串不会以空值终止,您可以拥有完全合法的字符串,其中包含空字符。

对于PHP,'\ 0'只是一个包含一个字符的字符串。

编辑:

PHP字符串存储为字符串中所有字符的列表以及总长度。这允许PHP存储0到255之间的任何字符值.C字符串使用NULL字符来确定字符串结束的位置,PHP仅使用长度来确定字符串的长度。

答案 1 :(得分:0)

由于PHP是基于C构建的,而空字节(\ 0)表示C中字符串的结尾,我想说它与此有关。 PHP.net有一篇关于空字节及其可能导致的问题的文章:

http://php.net/manual/en/security.filesystem.nullbytes.php