如何正确显示从PHP生成的SVG

6tr1vspr  于 2023-02-07  发布在  PHP
关注(0)|答案(2)|浏览(237)

我通过php生成svg qr代码,并在php文件中获得以下代码的结果:
generate-svg.php

<?
include("../qrcode/qrlib.php");
QRcode::svg('Example');
?>

我在浏览器的HTML代码中看到:

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" xmlns:xlink="http://www.w3.org/1999/xlink" width="111" height="111" viewBox="0 0 111 111">
<desc></desc>
<rect width="111" height="111" fill="#ffffff" cx="0" cy="0" />
<defs>
<rect id="p" width="3" height="3" />
</defs>
<g fill="#000000">
<use x="12" y="12" xlink:href="#p" />
</g>
</svg>

然后我需要把这个svg代码作为一个图片粘贴到另一个php文件中,我是这样做的:
svg.php

<?
echo '<object type="image/svg+xml" data="generate-svg.php" class="icon-qr"></object>';
?>

但是我需要得到svg代码并将其粘贴为图片,我该怎么做呢?
如果我使用

echo file_get_contents('generate-svg.php');

我看到这个HTML代码:

<!--?
include("../qrcode/qrlib.php");
QRcode::svg('Example');
?-->
<html><head></head><body></body></html>
v8wbuo2f

v8wbuo2f1#

其中一种方法是通过PHPx 1 m0n1x命令回显生成的SVG来显示SVG
假设generate-svg.php如下所示(例如,我生成了一个红色的圆圈):
DEMO

<!DOCTYPE html>
<html>
<body>
<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" xmlns:xlink="http://www.w3.org/1999/xlink" width="111" height="111" viewBox="0 0 111 111">

  <circle cx="50" cy="50" r="40" stroke="black" stroke-width="3" fill="red" />

</svg>

然后使用以下命令显示它(沿着要显示的其他内容):
DEMO

<?php 
echo "This is a line <br>";
echo file_get_contents("generate-svg.php"); 
echo "<br>This is another line <br>";
?>

[补充要点]

如果您正在通过PHP脚本呈现SVG,那么如果您在本地文件上使用file_get_contents,它将忠实地显示PHP脚本,而不是执行它,除非您使用以http://或https://开头的URL。您可以选择使用类似以下内容(假设php脚本命名为generate-svg2.php):

echo '<img src="generate-svg2.php">';

因此,generate-svg2.php可以是:
DEMO

<?php

    include('./phpqrcode-master/qrlib.php');
    
    // outputs image directly into browser, as PNG stream
  echo QRcode::svg('SO is good');

?>

则显示它(沿着其他HTML元素)的脚本可以是:
DEMO

<?php 
echo "This is a line <br>";
//echo file_get_contents("generate-svg.php"); 

echo '<img src="generate-svg2.php">';

echo "<br>This is another line x<br>";

?>
hfsqlsce

hfsqlsce2#

首先是Output Control Functions

ob_start();

require 'generate-svg.php';

$svg = ob_get_clean();

file_put_contents('svgs/generated-svg.svg', $svg);

然后:

<img src="/svgs/generated-svg.svg" height="200" width="200" alt="QR code">

相关问题