PHP如何让print_r或var_dump输出含空字节的二进制字符串?
如何完整输出包含空字节的二进制字符串
直接用echo或print输出包含空字节的二进制字符串时,终端、浏览器这类输出环境会把空字节(\0)当成字符串终止符,导致输出被截断。而var_dump会解析字符串的实际长度和结构,所以能正确展示完整信息。
下面是几种能完整输出的方法:
转成十六进制输出:用
bin2hex()把二进制字符串转换成十六进制格式,所有字节都会以可见字符展示,不会被截断:$binaryStr = file_get_contents('your_file.bin'); echo bin2hex($binaryStr);这种方式适合查看二进制内容的实际字节值,每个字节对应两位十六进制字符。
逐字节遍历输出:逐个处理字符串里的每个字节,输出其十六进制值和对应的字符,能清晰看到每一个字节的信息:
$binaryStr = file_get_contents('your_file.bin'); for ($i = 0; $i < strlen($binaryStr); $i++) { $byte = ord($binaryStr[$i]); echo sprintf('%02x (%s) ', $byte, chr($byte) === "\0" ? '\\0' : chr($byte)); }这里特意把空字节显示为
\0,避免终端直接忽略。写入文件用二进制编辑器查看:如果不需要在终端/浏览器实时输出,直接把字符串写入文件,用专门的二进制编辑器打开:
$binaryStr = file_get_contents('your_file.bin'); file_put_contents('output.bin', $binaryStr);像Hex Editor Neo、010 Editor这类工具都能完整展示二进制文件的所有内容。
网页环境下转义输出:如果是在网页中输出,用
htmlspecialchars配合print_r的返回值,避免浏览器解析空字节时截断:$binaryStr = file_get_contents('your_file.bin'); echo htmlspecialchars(print_r($binaryStr, true));
内容的提问来源于stack exchange,提问作者user3161924
相关产品推荐
相关产品推荐

