PHP怎么加编码_PHP生成二维码含中文乱码加编码怎么设【操作】-php教程

php生成二维码中文乱码的根本原因是gd库未指定中文字体导致utf-8被错误解析,解决需用endroid/qr-code v4+配真实ttf字体(如simhei.ttf),或对旧库强制gbk转码,或改用url编码传递中文参数。

PHP生成二维码时中文乱码的根本原因

不是二维码库本身不支持中文,而是默认用 UTF-8 编码生成的字符串,被某些二维码读取器(尤其是旧版微信、部分安卓扫码工具)误判为 GBK 或 ISO-8859-1。更关键的是:很多 PHP 二维码库(比如 endroid/qr-code 3.x 或原生 phpqrcode)在底层调用 GD 绘图时,若未显式指定字体路径或编码处理,imagefttext() 会直接把 UTF-8 字节流当单字节处理,导致每个中文字符被拆成 2–3 个乱码符号。

用 endroid/qr-code v4+ 正确显示中文(推荐)

v4 开始强制要求传入 string 类型内容,且内部已做 UTF-8 安全封装,但必须配合真实中文字体文件使用,否则仍会 fallback 到系统默认无中文支持的字体。

  • 安装:composer require endroid/qr-code:^4.0
  • 准备一个含中文的 TTF 文件(如 simhei.ttf),放在项目目录下(例如 ./fonts/simhei.ttf)
  • 生成代码必须显式设置字体:
use Endroid\QrCode\QrCode;
use Endroid\QrCode\Writer\PngWriter;

$qrCode = QrCode::create('你好,世界!')
    ->setSize(300)
    ->setEncoding('UTF-8'); // 这行可选,v4 默认就是 UTF-8

$writer = new PngWriter();
$result = $writer->write($qrCode, null, [
    'font_path' => './fonts/simhei.ttf', // ⚠️ 必须设!否则中文变方块或乱码
]);
header('Content-Type: image/png');
echo $result->getString();

注意:font_path 必须是服务器上真实可读的绝对或相对路径,不能是 URL;字体文件需有执行用户读取权限。

用老旧 phpqrcode 库临时救急(不推荐长期用)

该库已多年未维护,中文支持靠手动转码 + 指定字体,容易出错。仅适用于无法升级依赖的遗留系统。

立即学习“PHP免费学习笔记(深入)”;

夏夕资源网专注于CMS网站模板,主流语言整站网站源码下载,网站建设相关教程分享,好用的软件素材整合下载,提供一站式便捷自助服务。
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,默认解压密码为"zy.lucklyus.top",如遇到无法解压的请联系管理员!
夏夕资源网-网站模板_免费源码_资源素材 » PHP怎么加编码_PHP生成二维码含中文乱码加编码怎么设【操作】-php教程
在线时间:12:00 - 22:00
关注微信公众号:微信公众号
站长邮箱:[email protected]
  • 运营天数: 1391+
  • 资源总数: 47989+
  • 用户总数: 1+
  • 今日更新: 0+
  • 访问次数: 3991736+
  • 本周更新: 0+
  • 最后更新: 2026-03-16

本站指数

×
  • 运营天数: 1391+
  • 资源总数: 47989+
  • 用户总数: 1+
  • 今日更新: 0+
  • 访问次数: 3991736+
  • 本周更新: 0+
  • 最后更新: 2026-03-16