我不确定问题是什么。我认为这是编码问题。我想要的是
pack('V', 0x41) == "A"
返回true。即使来自mb_detect_encoding((的编码为两者返回ASCII;A";当被回音时,显示在屏幕上。真正的问题是,当压缩字符串包含在sql查询中时:
$sql = "SELECT item_name, item_description FROM items WHERE item_name LIKE '$querystr%'";
它无法执行查询,即使打印到屏幕上时字符串是等效的。这是针对我正在创建的CTF挑战,所以是的,该代码容易被注入。
pack
中的V参数采用32位无符号值(小端字节顺序(,因此您的调用看起来像
pack('V', 0x00000041) === "A "
您可以使用trim来消除多余的null,也可以使用另一个选项,例如c
pack('c', 0x41) === "A"