PHP - 如何让 pack() 成为 return 与常规字符串相同的字符串?

PHP - How can I get pack() to return a string that is the same as a regular string?

我不确定是什么问题。我认为这是一个编码问题。我想要的是

pack('V', 0x41) == "A"

到 return 正确。即使来自 mb_detect_encoding() returns ASCII 的编码都不是这种情况,并且在回显时都将“A”打印到屏幕上。真正的问题是当压缩字符串包含在 sql 查询中时:

 $sql = "SELECT item_name, item_description FROM items WHERE item_name LIKE '$querystr%'";

它无法执行查询,即使打印到屏幕上时字符串是等效的。这是针对我正在创建的 CTF 挑战,所以是的,该代码容易受到注入攻击。

pack 中的 V 参数采用 32 位无符号值(小端字节序),所以你的调用看起来像

pack('V', 0x00000041) === "A[=10=][=10=][=10=]"

您可以使用 trim 去除多余的空值 您可以使用其他选项,例如 c

pack('c', 0x41) === "A"