代码之家  ›  专栏  ›  技术社区  ›  Zacky112

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

php
  •  105
  • Zacky112  · 技术社区  · 15 年前

    PHP 函数是什么意思 binary-safe

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

    3 回复  |  直到 15 年前
        1
  •  111
  •   Michael Borgwardt    15 年前

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

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

        2
  •  93
  •   Gerald Artefacto    10 年前

    binary safe 一般指。

    在PHP中,其含义更为具体,仅指Michael给出的示例。

    PHP中的所有字符串都有一个相关的长度,即组成字符串的字节数。当函数操作字符串时,它可以:

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

    引擎操作的所有字符串PHP变量也都以null结尾,这也是事实。依赖于2.的函数的问题是,如果字符串本身包含一个带值的字节 ,操作它的函数将认为字符串已在该点结束,并将忽略此后的所有内容。

    例如,如果PHP strlen 函数的工作方式类似于C标准库 ,这里的结果是错误的:

    $str = "abc\x00abc";
    echo strlen($str); //gives 7, not 3!
    
        3
  •  63
  •   Anon30 Subscriberius    10 年前

    <?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 table 查看ASCII字符列表

    推荐文章