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

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (22)

PHP什么它通过一个函数是指binary-safe

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

提问于
用户回答回答于

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

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

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

用户回答回答于

在PHP中,含义更具体

PHP中的所有字符串都有一个关联的长度,它们是组成它的字节数。当一个函数处理一个字符串时,它可以:

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

由引擎操作的所有字符串PHP变量也都是空终止的,这也是事实。依赖于2的函数的问题在于,如果字符串本身包含一个带有值的字节0,则操作它的函数会认为该字符串在该点处结束,并且在此之后将忽略所有内容。

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

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

扫码关注云+社区