跳转到主内容
新派编程网 - 新潮编程理念,全新技术课堂!

php如何生成二维码_php生成二维码库使用法【二维码】

endroid/qr-code 是生成 PNG 二维码最稳妥的 PHP 第三方库,需启用 GD 扩展,调用 QRCode::create() 后必须 setSiz e、setMargin 并 writeString() 输出,中文需 urlencode 或配置 font_path,SVG 输出须设 image/svg+xml 头。 用
endroid/qr-code
生成 PNG 二维码最稳妥 PHP 官方没有内置二维码生成功能,必须依赖第三方库。
endroid/qr-code
是目前维护活跃、API 清晰、默认输出 PNG 的首选。它不依赖 GD 扩展(可选使用 imagick),但若用默认驱动,需确保
gd
已启用:
php -m | grep gd
若无输出,需在
php.ini
中取消
;extension=gd
的注释并重启 Web 服务。
QRCode::create()
基本调用不能少这三步 生成一个可用二维码,核心是创建实例 → 设置尺寸与内容 → 输出或保存。漏掉任意一步都会报错或返回空白:
QRCode::create()
必须传入字符串内容,空字符串或
null
会抛出
InvalidArgumentException
->writeString()
返回的是原始 PNG 二进制数据,不是 Base64;若直接
echo
,需先设置
header('Content-Type: image/png')
->saveToFile()
要求目标目录有写权限,且父目录必须存在,否则抛出
RuntimeException
$qrcode = QRCode::create('https://example.com') ->setSize(300) ->setMargin(10); header('Content-Type: image/png'); echo $qrcode->writeString();
中文内容乱码?关键是 编码 和字体双处理 直接传入中文字符串(如
'你好'
)默认会失败或显示方块,因为
endroid/qr-code
默认只支持 ASCII。解决方法不是改字符集,而是启用「带 logo 或文本的复合二维码」模式,并显式指定中文字体: 必须使用
WriterStyle::create()->setLogoPath()
或
->setForegroundColour()
等扩展写法时,才触发字体加载逻辑 实际生效的路径是
->setWriterOptions(['font_path' => '/path/to/simhei.ttf'])
,字体文件需为 TrueType 格式(.ttf),且 PHP 进程有读取权限 若仅需扫码识别中文内容(非显示中文),应先
urlencode()
再传入,如
QRCode::create(rawurlencode('你好'))
,扫码后客户端自行解码 生成 SVG 二维码要注意 MIME 类型和 浏览器 兼容性 用
QrCode::create(...)->setWriter(new SvgWriter())
可输出矢量格式,但不能直接用
writeString()
返回 HTML 片段 —— 它返回的是纯 XML 字符串,缺少
声明和命名空间,部分浏览器(如旧版 Safari)会拒绝渲染: 立即学习 “ PHP免费学习笔记(深入) ”; 务必手动添加响应头:
header('Content-Type: image/svg+xml')
不要嵌入到 HTML 中再用
,Base64 编码 SVG 易出错;推荐用独立 URL 提供 SVG 若需在网页内联显示,用
echo $qrcode->writeString()
输出原始 SVG 字符串,并包裹在
中(注意:SVG 不支持
加载自身) 复杂点在于:二维码容错等级、边框留白、颜色定制这些参数虽灵活,但一旦混用
setWriter()
和
setWriterOptions()
,容易因驱动差异导致静默失败。建议始终用最新稳定版(v4+),并优先走 PNG + GD 路径,除非明确需要缩放不失真。

相关文章