PHP中的字节操作

Mic*_*ael 18 php byte

在PHP中,如果您有一个包含二进制数据的变量,那么如何从数据中获取特定字节?例如,如果我有一些30字节长的数据,我如何获得前8个字节?

现在,我正在使用substr()函数将其视为字符串:

$data = //...
$first8Bytes = substr($data, 0, 8);
Run Code Online (Sandbox Code Playgroud)

使用substr二进制数据是否安全?

还是我应该使用其他功能?

Mic*_*ael 15

如果安装了mbstring扩展并且启用了mbstring重载,那么使用substr可能会给你带来麻烦.每次mb_substr调用时都会自动调用Mbstring重载substr(如果安装了mbstring并且禁用了 mbstring重载,那么substr将正确检索字节).mb_substr如果安装了mbstring,则使用以下代码,substr如果不安装,则使用以下代码.使用"8位"字符编码,它将每个字符视为1个字节,并将忽略空终止符('\ 0').

if (function_exists('mb_substr')) {
    $bytes = mb_substr($string, 0, 8, '8bit');
} else {
    $bytes = substr($string, 0, 8);
}
Run Code Online (Sandbox Code Playgroud)

感谢ircmaxell


mar*_*rio 10

通常,PHP中的所有字符串函数都可以安全地使用原始字节.主要出现的问题是空字节,但仅适用于文件系统函数:http://php.net/manual/en/security.filesystem.nullbytes.php

substr()是完全没有用二进制字符串使用.其他一些函数strtok,ereg但是与C接口,其中"\ 0"字符成为问题.