Mic*_*rdt 98
这意味着当您传递任意二进制数据(即包含非ASCII字节和/或空字节的字符串)时,该函数将正常工作.
例如,非二进制安全函数可能基于C函数,该函数需要以null结尾的字符串,因此如果字符串包含空字符,则该函数将忽略其后的任何内容.
这是相关的,因为PHP没有干净地分隔字符串和二进制数据.
Art*_*cto 90
其他用户已经提到了binary safe一般的含义.
在PHP中,含义更具体,仅指Michael给出的例子.
PHP中的所有字符串都有一个相关的长度,它是组成它的字节数.当函数操作字符串时,它可以:
0将出现一个带有值的字节.由引擎操纵的所有字符串PHP变量也是以空值终止的.依赖于2.的函数的问题在于,如果字符串本身包含带有值的字节0,则操作它的函数将认为字符串已在该点结束并且在此之后将忽略所有内容.
例如,如果PHP的strlen函数像C标准库一样工作strlen,那么这里的结果将是错误的:
$str = "abc\x00abc";
echo strlen($str); //gives 7, not 3!
Run Code Online (Sandbox Code Playgroud)
小智 59
更多例子:
<?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.
?>
Run Code Online (Sandbox Code Playgroud)
\x表示十六进制表示法.请参阅:PHP字符串
0x00 = NULL
0x04 = EOT (End of transmission)
Run Code Online (Sandbox Code Playgroud)
ASCII表查看ASCII字符列表