php生成二维码关键是选库、引文件、传参三步;phpqrcode需同时引入qrlib.php和qrimg.php,中文须转gb2312编码,加logo或改色推荐改用endroid/qr-code库。

直接上手比学原理快得多。PHP生成二维码不是算法题,是调库+调参+避坑的事。选对库、引对文件、传对参数,三步就能跑出图;卡住的90%问题都出在这三步里。
require_once 报 Class 'QRcode' not found 怎么办
这是新手第一道坎,本质是类没加载进来,不是库没装好。phpqrcode 不需要 Composer 安装,但必须同时引入两个文件:qrlib.php 和 qrimg.php(后者依赖前者)。只引一个就会报这个错。
- 必须按顺序写:
require_once 'qrlib.php';,再require_once 'qrimg.php'; - 路径写错不会报致命错误,而是静默失败——用
file_exists()检查路径是否真实存在 - 如果项目已用 Composer,别硬塞 phpqrcode,改用
endroid/qr-code,它自动注册类,不会出现这类加载问题
中文显示方块或问号怎么修复
phpqrcode 原生不支持 UTF-8,不是字体或浏览器问题,是编码层就断了。直接传中文字符串,底层会当乱码处理。- 正确做法:用
iconv('UTF-8', 'GB2312//IGNORE', $text)或mb_convert_encoding($text, 'GB2312', 'UTF-8')预转码 - 别用
utf8_encode()——它只把 Latin-1 字符升为 UTF-8,对中文完全无效 - 如果内容含 emoji 或生僻字,GB2312 也撑不住,这时建议换
endroid/qr-code,它原生支持 UTF-8,无需手动转码
QRcode::png() 参数顺序和默认值容易搞混
函数签名是QRcode::png($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4),第 2–5 个参数全带默认值,但新手常把 $size(模块像素大小)和 $margin(白边模块数)记反。
-
$size = 1理论可行,但手机扫码大概率失败;$size = 4是较稳妥的起点 -
$margin = 0会导致微信/支付宝识别失败——它们强制要求至少 4 个模块宽度的空白边 - 容错级别
$level推荐用QR_ECLEVEL_M(默认),内容短时选H反而让图案过密、识别率下降
想加 logo 或改颜色,phpqrcode 能不能直接做
不能。phpqrcode 本身只负责生成纯二维码图像,logo 是靠 GD 库二次合成的额外操作,需要自己写imagecopyresized() 等逻辑,容易出尺寸错位、透明通道丢失等问题。
- 如果必须加 logo,推荐直接切到
endroid/qr-code,用->merge('logo.png', .15)一行搞定,比例自动适配 - 改前景/背景色在 phpqrcode 里要动源码或另起 GD 操作;而
endroid/qr-code提供->color(0, 0, 0)->backgroundColor(255, 255, 255)这种直观接口 - 复杂样式需求(SVG 输出、缓存、标签文字)基本只能靠现代库支撑,phpqrcode 的设计目标就是“能用”,不是“好看”或“灵活”
真正卡住人的地方,往往不是“怎么生成”,而是“为什么生成了却扫不出”——白边不够、模块太小、中文没转码、输出前有空格,这些细节不验证就上线,调试成本远高于换库重写。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











