使用phpqrcode不能正确的生成二维码问题

fatelerror
  • 82

接收客户端发来的数据,将此数据作为参数加到URL中,然后生成此URL的二维码。可以生成二维码,但是生成的二维码的URL却没有带上我要的参数。

代码如下

$param_str = urldecode($_POST['data']);
$param_str = base64_encode($param_str);
$url = "http://www.example/order_add.php?data=".$param_str;

//url1是将参数直接写入URl中
//$url1 = "http://www.example/order_add.php?data=eyJ1aWQiOiIxMzU5MDE3NjY0N19oaiIsICJtb2JpbGVwaG9uZSI6IjEzNTkwMTc2NDY0IiwgImFyZWEiOiLljJfkuqzluILkuJzln47ljLrkuJzljY7pl6jooZfpgZMiLCAic2hvcExpc3QiOlt7InNob3BQcm9kdWN0ViI6MiwgImFkZGl0aW9uV29yZCI6IiIsICJwb3N0VHlwZSI6MSwgInByaWNlVG90YWwiOjAuMTIsICJwcm9kdWN0TGlzdCI6W3sicHJvZHVjdFZvbHVtZSI6MSwgImNvbWJvSWQiOjAsICJwcm9kdWN0SWQiOjM1fSwgeyJwcm9kdWN0Vm9sdW1lIjoxLCAiY29tYm9JZCI6MCwgInByb2R1Y3RJZCI6NzF9XSwgInNob3BJZCI6MjIsICJwb3N0UHJpY2UiOjAuMH1dLCAiYWRkcmVzcyI6IjY2NjY2NjY2NjY2NjYiLCAiZm9ybUNhcnQiOjEsICJ0ZWxlcGhvbmUiOiJudWxsIiwgImNvbm5lY3ROYW1lIjoiMzMzMzMzMzMzMzMzMzMzMzMzMzMifQ==";

//这个生成二维码链接中data参数为空
echo QRcode::png($url);

//这样却可以生成正确的二维码
//echo QRcode::png($url1);


//$url与$url1恒等比较过为1,两者编码相同都为ASCII

大致估计是参数传过来时有问题,但是不知道如何排查。

另外这样也可以生成正确的二维码

//手动赋值$param_str
$param_str = "eyJ1aWQiOiIxMzU5MDE3NjY0N19oaiIsICJtb2JpbGVwaG9uZSI6IjEzNTkwMTc2NDY0IiwgImFyZWEiOiLljJfkuqzluILkuJzln47ljLrkuJzljY7pl6jooZfpgZMiLCAic2hvcExpc3QiOlt7InNob3BQcm9kdWN0ViI6MiwgImFkZGl0aW9uV29yZCI6IiIsICJwb3N0VHlwZSI6MSwgInByaWNlVG90YWwiOjAuMTIsICJwcm9kdWN0TGlzdCI6W3sicHJvZHVjdFZvbHVtZSI6MSwgImNvbWJvSWQiOjAsICJwcm9kdWN0SWQiOjM1fSwgeyJwcm9kdWN0Vm9sdW1lIjoxLCAiY29tYm9JZCI6MCwgInByb2R1Y3RJZCI6NzF9XSwgInNob3BJZCI6MjIsICJwb3N0UHJpY2UiOjAuMH1dLCAiYWRkcmVzcyI6IjY2NjY2NjY2NjY2NjYiLCAiZm9ybUNhcnQiOjEsICJ0ZWxlcGhvbmUiOiJudWxsIiwgImNvbm5lY3ROYW1lIjoiMzMzMzMzMzMzMzMzMzMzMzMzMzMifQ==";

$url = "http://www.example/order_add.php?data=".$param_str;
echo QRcode::png($url);

//增加路径
//增加路径的话会生成实体的图片文件,如果有多人同时访问,前者就会被覆盖。所以不适合实际用
QRcode::png($url,"order_qr.png");*/
回复
阅读 9.1k
2 个回答

自己解答,只找到了错误的地方,没找到为什么。
这个问题是客户端用JQuery的$.ajax传过来的参数,导致phpqrcode不能获取(服务器端是确实获取到了数据的,phpqrcode在编码的前一步,url都是正确的),客户端如果换成用form表单提交的形式就可以。

jquery的ajax操作不需要urldecode呀,其实一般用到的是urlencode,浏览器会自动decode的。
你试试看是不是这个原因导致的拿不到参数。

宣传栏