首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在PHP中,函数是二进制安全的是什么意思?

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

Stack Overflow用户
提问于 2010-07-16 19:52:16
回答 3查看 20.5K关注 0票数 134

PHP中,函数是binary-safe是什么意思?

它们的特殊之处是什么?它们通常在哪里使用?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-07-16 19:57:21

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

例如,一个非二进制安全函数可能基于一个C函数,该C函数需要以null结尾的字符串,因此如果该字符串包含null字符,则该函数将忽略其后的任何字符。

这一点很重要,因为PHP不能清晰地将字符串和二进制数据分开。

票数 117
EN

Stack Overflow用户

发布于 2010-07-16 20:18:58

其他用户已经提到了binary safe的一般含义。

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

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

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

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

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

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

Stack Overflow用户

发布于 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

票数 66
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3264514

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档