PHP 中的字节操作
在PHP中,如果你有一个包含二进制数据的变量,你如何从数据中获取特定的字节?例如,如果我有一些长度为 30 字节的数据,如何获取前 8 个字节?
现在,我像一个字符串一样对待它,使用这个函数:substr()
$data = //...
$first8Bytes = substr($data, 0, 8);
将 substr
与二进制数据一起使用是否安全?
还是我应该使用其他功能?
在PHP中,如果你有一个包含二进制数据的变量,你如何从数据中获取特定的字节?例如,如果我有一些长度为 30 字节的数据,如何获取前 8 个字节?
现在,我像一个字符串一样对待它,使用这个函数:substr()
$data = //...
$first8Bytes = substr($data, 0, 8);
将 substr
与二进制数据一起使用是否安全?
还是我应该使用其他功能?
如果安装了 mbstring 扩展并启用了 mbstring 重载,则使用可能会给您带来麻烦。每次调用时都会自动调用 Mbstring 重载(如果安装了 mbstring 并且禁用了 mbstring 重载,则将正确检索字节)。如果安装了 mbstring,则使用下面的代码,如果未安装, 则使用下面的代码。使用“8 位”字符编码,它将每个字符视为 1 个字节,并将忽略空终止符 ('\0')。substr
mb_substr
substr
substr
mb_substr
substr
if (function_exists('mb_substr')) {
$bytes = mb_substr($string, 0, 8, '8bit');
} else {
$bytes = substr($string, 0, 8);
}
通常,PHP中的所有字符串函数都可以安全地与原始字节一起使用。最常出现的问题是空字节,但仅适用于文件系统函数:http://php.net/manual/en/security.filesystem.nullbytes.php
您的完全可以用于二进制字符串。其他一些函数,如 C 接口,其中“\0”字符成为一个问题。substr()
strtok
ereg