如何在PHP中正确嵌入生成的SVG二维码代码?
问题描述
我通过PHP生成SVG二维码,generate-svg.php代码如下:
<? include("../qrcode/qrlib.php"); QRcode::svg('Example'); ?>
在浏览器中查看该文件的输出,能看到完整的SVG结构,但我希望将这段SVG代码直接嵌入到另一个PHP文件(比如svg.php)中,而非用<object>标签引入。尝试用file_get_contents('generate-svg.php')时,得到的却是PHP源码而非生成的SVG代码:
<!--? include("../qrcode/qrlib.php"); QRcode::svg('Example'); ?--> <html><head></head><body></body></html>
解决方法
方法1:直接在目标文件中生成SVG字符串并输出
QRcode的svg()方法支持返回SVG内容而非直接输出,只需将第二个参数设为false。在svg.php中直接调用:
<?php include("../qrcode/qrlib.php"); // 第二个参数设为false,获取SVG字符串 $svgContent = QRcode::svg('Example', false); // 直接嵌入SVG代码到页面中 echo $svgContent; ?>
方法2:用输出缓冲捕获generate-svg.php的执行结果
如果不想修改generate-svg.php,可以在svg.php中用输出缓冲机制捕获其执行后的输出:
<?php // 开启输出缓冲 ob_start(); // 执行generate-svg.php,此时它的输出会被缓冲 include('generate-svg.php'); // 获取缓冲内容并关闭缓冲 $svgContent = ob_get_clean(); // 输出SVG代码 echo $svgContent; ?>
方法3:修改generate-svg.php返回SVG内容
调整generate-svg.php,让它返回SVG字符串而非直接输出,后续可更灵活调用:
<?php include("../qrcode/qrlib.php"); // 生成SVG字符串并返回 return QRcode::svg('Example', false); ?>
然后在svg.php中:
<?php // 获取generate-svg.php返回的SVG内容 $svgContent = include('generate-svg.php'); echo $svgContent; ?>
注意:
file_get_contents只能读取文件的原始源码,不会执行PHP代码,因此无法直接用它获取生成后的SVG内容。必须通过执行PHP脚本(include/require)、输出缓冲,或通过curl访问文件的URL路径(而非本地文件路径)来获取执行后的输出。
内容的提问来源于stack exchange,提问作者Vlad
相关产品推荐
相关产品推荐

