php过滤svg标签,如何使用PHP获取SVG标记内容

我想用PHP获取SVG标记内容.

test.svg:

width="202.5px" height="226.084px" viewBox="0 0 202.5 226.084" enable-background="new 0 0 202.5 226.084" xml:space="preserve">

PHP:

$svg = new SimpleXMLElement( file_get_contents( 'test.svg' ) );

$svg->registerXPathNamespace('svg', 'http://www.w3.org/2000/svg');

$svg->registerXPathNamespace('xlink', 'http://www.w3.org/1999/xlink');

现在,我想将svg标记内容作为字符串.

期望的结果(硬编码示例):

$content = '

';

//编辑:

我不想寻找g标签:’/ svg:svg / svg:g’.

由于无法保证svg内部会有g标签.可能有超过一个g标签或一些其他标签.

我想获得开始和结束svg标签之间的所有内容.

解决方法:

您已经看到了正确的(更可能是:从a previous answer中提供给您的示例代码中进行复制和粘贴,无需进一步了解)您需要在此处为​​xpath注册XML命名空间,因为它没有前缀在XML中:

width="202.5px" height="226.084px" viewBox="0 0 202.5 226.084" enable-background="new 0 0 202.5 226.084" xml:space="preserve">

它只是URI http://www.w3.org/2000/svg,没有给出前缀.它是< svg>的名称空间.根元素.

因此,您需要注册前缀(另一个已经有前缀的命名空间应该已经自动注册):

$svg->registerXPathNamespace('svg', 'http://www.w3.org/2000/svg');

你到目前为止做了什么.

要在xpath查询中使用您的注册前缀,请在其前面添加标记名:

/svg:svg/svg:g[1]

应该给你第一个< g>该SVG命名空间中的元素.如果仍需要进一步解释/澄清,请告诉我.

这也是上一个问题的原因:

标签:php,namespaces,xml,svg,simplexml

来源: https://codeday.me/bug/20190529/1178545.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值