在PHP
中,函数是binary-safe
是什么意思?
它们的特殊之处是什么?它们通常在哪里使用?
发布于 2010-07-16 19:57:21
这意味着当您向函数传递任意二进制数据(即包含非ASCII字节和/或空字节的字符串)时,该函数将正常工作。
例如,一个非二进制安全函数可能基于一个C函数,该C函数需要以null结尾的字符串,因此如果该字符串包含null字符,则该函数将忽略其后的任何字符。
这一点很重要,因为PHP不能清晰地将字符串和二进制数据分开。
发布于 2010-07-16 20:18:58
其他用户已经提到了binary safe
的一般含义。
在PHP中,含义更为具体,仅指Michael给出的示例。
PHP中的所有字符串都有一个关联的长度,即组成字符串的字节数。当函数操作字符串时,它可以:
0
的字节。同样,引擎操作的所有字符串PHP变量也都以null结尾。依赖于2的函数的问题是,如果字符串本身包含一个值为0
的字节,则操作它的函数将认为该字符串已在该点结束,并将忽略该点之后的所有内容。
例如,如果PHP的strlen
函数像C标准库strlen
一样工作,那么这里的结果将是错误的:
$str = "abc\x00abc";
echo strlen($str); //gives 7, not 3!
发布于 2013-08-28 20:09:14
更多示例:
<?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
表示十六进制表示法。请参阅:PHP strings
0x00 = NULL
0x04 = EOT (End of transmission)
查看ASCII字符列表的ASCII table
https://stackoverflow.com/questions/3264514
复制相似问题