PHP中hex2bin()处理POST请求传入字符串无响应问题求助
问题根因与解决方案
你遇到的问题本质是POST获取的字符串和你手动赋值的字符串实际内容并不完全一致,浏览器直接echo输出会隐藏不可见字符/特殊符号,才会让你误以为两个值完全相同。可以按照以下步骤排查解决:
第一步:确认两个字符串的实际差异
不要依赖浏览器的echo输出判断值是否相等,使用var_dump和strlen输出两个变量的实际长度和内容:
// 加在代码开头开启错误显示,能直接看到hex2bin的报错信息 error_reporting(E_ALL); ini_set('display_errors', 1); $validator = $_POST["validator"]; $var = "a6025c7719d0d87dcdf5f398dde9838b4fc00a14d56152aaac78ab32d55023f3"; var_dump($validator, strlen($validator)); var_dump($var, strlen($var));
如果两个输出的长度不一样,就说明POST传入的字符串带有多余字符,常见的情况有:
- 前后带空白字符(空格、换行、制表符、\0空字符等)
- 前端传参时额外带了双引号,浏览器渲染echo结果时会把引号识别为HTML边界隐藏,实际字符串多了前后两个引号
- 混入了非十六进制的不可见字符,不符合
hex2bin的输入要求
第二步:清理无效字符后再调用hex2bin
先对POST传入的字符串做清洗,再做合法性校验:
// 先清除前后空白,再清除可能多余的双引号 $validator = trim($_POST["validator"]); $validator = trim($validator, '"'); // 校验是否为合法的十六进制字符串 if (!ctype_xdigit($validator)) { die("传入的validator不是合法的十六进制内容"); } // 校验长度是否为偶数,hex2bin要求输入长度必须是偶数 if (strlen($validator) % 2 !== 0) { die("十六进制字符串长度不合法"); } echo hex2bin($validator);
按以上步骤操作后就能正常输出结果。
内容的提问来源于stack exchange,提问作者VeRexkx
相关产品推荐
相关产品推荐

