在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)
mar*_*rio 10
通常,PHP中的所有字符串函数都可以安全地使用原始字节.主要出现的问题是空字节,但仅适用于文件系统函数:http://php.net/manual/en/security.filesystem.nullbytes.php
你substr()是完全没有用二进制字符串使用.其他一些函数strtok,ereg但是与C接口,其中"\ 0"字符成为问题.