在 PHP 服务器端加载 SVG 文件


Load SVG file on PHP server side

我想根据参数加载 svg 文件。
例如,如果参数 = A 则加载 A.svg,如果参数 = B 则加载 B.svg,依此类推。
对于这种情况,我使用的是 Codeigniter,因此在 Model 上,我像这样加载 svg 文件:

型号.php

$svgTag = '<div id="svg-content" >' 
          . '<input type="radio" name="test"/>'
          . file_get_contents( APPPATH. 'views/svg/'.$param.'.svg', TRUE)
          . '</div>'

之后,我将$svgTag加载到视图中。
查看.php

<html>
   <body>
      <?php echo $svgTag; ?>
   </body>
</html>

我的期望是 svg 文件将在div#svg-content中加载,但实际结果是在标签<body>后加载 svg,如下所示:
RESULT

<html>
   <body>
      <svg>........</svg> <!-- Loaded SVG File -->
      <div id="svg-content" >
         <input type="radio" name="test"/>
      </div>
   </body>
</html>

我想在单选按钮上添加事件,如果单击它,则更改 SVG 图像的颜色。
如果我使用<object>我就不能应用这种样式。注意:这是我尝试加载的文件内容:

<?xml version="1.0" encoding="utf-8"?>
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
        viewBox="0 0 1280 800" enable-background="new 0 0 1280 800" xml:space="preserve">
    <g>
        <polygon points="358.3,524.2 328.3,524.2 328.3,665 415,665 415,640 358.3,640    "/>
    </g>
</svg>

有没有办法得到这样的结果..?

<html>
   <body>
      <div id="svg-content" >
         <input type="radio" name="test"/>
         <svg>........</svg> <!-- Loaded SVG File -->
      </div>
   </body>
</html>

使用 <img> 标签将其嵌入页面中,这将使您完全控制在 html 中的位置

$svgTag = '<div id="svg-content" >' 
      . '<input type="radio" name="test"/>'
      . '<img src="'.APPPATH. 'views/svg/'.$param.'.svg'.'" alt="">'
      . '</div>'

这是对 SVG 文件使用 <img><object><embed> 的真棒答案?

终于找到了答案。
应该使用 fread() 函数来加载 SVG 文件。
所以,它应该是这样的:

$fh = fopen(APPPATH. 'views/svg/'.$param.'.svg', 'r');
$svg_file = fread($fh, 25000);
$svgTag = '<div id="svg-content" >' 
           . '<input type="radio" name="test"/>'
           . $svg_file
           . '</div>'