在PHP中,一个函数是二进制安全的意味着什么?

PHP中,一个函数是binary-safe意味着什么?

是什么使他们特别,他们通常在哪里使用?

这意味着当你传递任意的二进制数据(即包含非ASCII字节和/或空字节的string)时,函数将正常工作。

例如,一个非二进制安全的函数可能基于一个C函数,该函数需要以空字符结尾的string,所以如果string包含空字符,函数会忽略它后面的任何内容。

这是相关的,因为PHP不会干净地分离string和二进制数据。

其他用户已经提到了一般的binary safe手段。

在PHP中,含义更具体,仅指Michael所给的例子。

PHP中的所有string都有一个相关的长度,它们是组成它的字节数。 当一个函数操纵一个string时,它可以:

  1. 依靠这个长度的元数据。
  2. 依赖于以空字符结尾的string,即在数据实际上是string的一部分之后,会出现一个值为0的字节。

由引擎操纵的所有stringPHPvariables也是空的,也是事实。 依赖于2的函数的问题是,如果string本身包含一个值为0的字节,那么操纵它的函数会认为string在那一点结束,并且在此之后将忽略所有的string。

例如,如果PHP的strlen函数像C标准库strlen一样工作,结果就是错误的:

 $str = "abc\x00abc"; echo strlen($str); //gives 7, not 3! 

更多例子:

 <?php $string1 = "Hello"; $string2 = "Hello\x00World"; // This function is NOT ! binary safe echo strcoll($string1, $string2); // gives 0, strings are equal. // This function is binary safe echo strcmp($string1, $string2); // gives <0, $string1 is less than $string2. ?> 

\x表示hex符号。 请参阅: PHPstring

 0x00 = NULL 0x04 = EOT (End of transmission) 

ASCII表格来查看ASCII字符列表