【问题标题】:Generating QR Code using PHP QrCode使用 PHP QrCode 生成二​​维码
【发布时间】:2013-07-05 07:32:33
【问题描述】:

使用 PHP QrCode 库后,我发现由于某种原因,当使用带有脚本和对话框 (JQuery) 的动态页面时,当尝试以 .png 格式输出 QR 码时,我得到奇怪的符号而不是实际生成的符号.png 文件。

这是我尝试过的:

创建了一个单独的文件:

<?php
//include only that one, rest required files will be included from it
include "phpqrcode/qrlib.php";

QRcode::png('barrda554');
?>

效果很好,

尝试 2:

使用 JQuery UI 在对话框类型中打开的文件:

<?php

header stuff...
include "phpqrcode/qrlib.php";
...
?>
<html>
...
  <?php
   QRcode::png('barrda554');
  ?>
..
</html>

在这次尝试中,由于某种原因,我得到了多个时髦的符号:

    �PNG  IHDRWWKK/PLTE���U��~�IDAT8��ѱ � P# �c��n :V�L�@�k 
y��)�|F��5`ڸzHF|l���
%Z"e�Ы�D{\�ގ����p`�f�eh�������k�[BJeJ�c����,�^�gu�m|Q��o��W����g�
    �#�s�<�y��k�m��!v�.��(+�u���$s�-�n$߫>�gR�`IEND�B`�

这让我很困惑,我不确定我应该如何解决这个问题。

让我知道你的想法,

大卫

更新:

在 JQuery 打开的文件中放入header('Content-Type: image/png'); 后,没有雪茄。

这是实际文件:

http://jsfiddle.net/T4nEP/

【问题讨论】:

  • 确保您通过正确的content-type
  • @DevZer0 你是什么意思?我正在用它生成的内容做同样的事情。
  • 检查@jcsanyi 的答案。

标签: php qr-code


【解决方案1】:

问题出在这里:

<html>
<?php
QRcode::png('barrda554');
?>
</html>

要了解这是做什么的,假设您在文本编辑器中打开一个常规 PNG 文件,然后将内容直接复制/粘贴到您的 HTML 文件中。它不会显示图像 - 它只是垃圾,就像你看到的那样。

要在 HTML 文件中包含图像,您需要使用 &lt;img&gt; 标记,并指向图像的 URL。在这种情况下,图像的 URL 将是一个 PHP 脚本,除了 PNG 内容之外什么都不输出 - 像这样:

<img src="qrcode.php">

然后在qrcode.php中,生成图片:

<?php
include "phpqrcode/qrlib.php";
QRcode::png('barrda554');
?>

如果您需要 HTML 页面中的一些信息来生成图像,您可以将其作为查询参数包含在 URL 中,如下所示:

<img src="qrcode.php?product=1&format=2">

然后像这样在你的 PHP 中获取这些值:

<?php
include "phpqrcode/qrlib.php";
$product = $_GET['product'];
$format = $_GET['format']
// ...
// whatever you need to do to generate the proper code
// ...
QRcode::png('barrda554');
?>

最后 - 种方法可以将图像数据直接包含到 HTML 页面中,但并非所有浏览器都支持,也不推荐使用,因为它会使页面大小很大 更大,阻止浏览器单独缓存图像。

您可以查看有关 base64 数据 URL herehere 的更多信息。

【讨论】:

  • 我试过这个:session_start(); include "phpqrcode/qrlib.php"; QRcode::png('/live-pay/active.php?user=' . $_SESSION['userActive']); - 这是在 img src 调用的 grab.php 文件中:echo '&lt;img src="../member/qr-functions/grab.php" /&gt;';
  • 内部错误通常意味着 PHP 语法或致命错误。尝试打开 PHP 错误显示,或检查您的 PHP 错误日志以查看确切的错误消息。
  • Nvm 已修复!太棒了,非常感谢!你的祝福:)
  • 投票支持我的问题,如果您认为这是一个好问题,我可以获得更多积分!
【解决方案2】:

确保您有以下 php 代码来生成正确的 Content-Type 标头,以便浏览器知道如何呈现其接收的数据。

header("Content-Type: image/png");

【讨论】: