直接运行 composer require svglib/svglib 即可安装唯一维护的 SVG 解析库;注意命名空间为 SVG\SVG 和 SVG\XML\XMLParser,非 SvgParser;该库只读解析,修改需重建节点或正则操作 XML 字符串。

Composer 安装 php-svg-lib 失败或找不到包?
直接运行 composer require svglib/svglib 就能装上——这是当前唯一维护的、可正常工作的 SVG 解析库。别用过时的 phantomjs/php-svg-lib 或拼错的 php-svg-lib,它们要么已归档,要么根本不存在于 Packagist。安装前确认你的 composer.json 中 "minimum-stability" 不是 "stable" 且没加 "prefer-stable": true,否则可能因该库版本标为 dev 而拒绝安装。
加载 SVG 文件后报 “Class not found” 或 “Cannot instantiate SvgParser”?
这个库不提供自动加载的顶层类名 SvgParser,入口类实际是 SVG\SVG(注意大小写)和解析器 SVG\XML\XMLParser。常见错误是照着旧文档写 new SvgParser() 或漏掉命名空间。正确做法是:
- 确保已执行
require 'vendor/autoload.php'; - 用
$svg = SVG\SVG::fromFile('chart.svg');加载文件,它内部会调用XMLParser - 若需手动解析 XML 字符串,用
$parser = new SVG\XML\XMLParser(); $doc = $parser->parse($xmlString);
解析后无法提取路径或修改 viewBox?
php-svg-lib 的设计偏向“只读解析”,它把 SVG 转成 DOM-like 结构(SVG\Nodes\SVGNode 子类),但不提供类似 jQuery 的链式操作或直接属性赋值。比如 $svg->viewBox 是只读属性,改了也不生效;想更新 viewBox 必须重建节点或序列化后正则替换。实际操作建议:
- 用
$svg->getChildren()遍历获取SVG\Nodes\Shapes\Path等子节点 - 路径数据存在
$path->getAttribute('d'),可提取后用正则或SVG\Utils\PathParser解析 - 导出修改后的 SVG:调用
$svg->toXML(),再用file_put_contents()写入,不要试图直接改对象属性
中文文字渲染异常或字体缺失导致乱码?
该库本身不处理字体渲染,只解析结构。如果你用它生成图像(例如配合 dompdf 或 imagick),中文乱码通常来自底层渲染引擎,而非解析环节。验证方法:打印 $svg->toXML() 输出,确认 <text>你好</text> 原样存在。真正要解决的是后续渲染链路:
立即学习“PHP免费学习笔记(深入)”;
- 若输出 PDF,确保
dompdf已配置中文字体(如 Noto Sans CJK)并启用DOMPDF_ENABLE_REMOTE - 若用
imagick渲染,需提前设置$imagick->setFont('/path/to/wenquanyi.ttf') - 解析阶段无需额外编码处理,UTF-8 的
<text>内容会被原样保留
$path->scale(2) 这种方法存在。



















