首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Php:删除多个子标记(脚本)

问Php:删除多个子标记(脚本)
EN

Stack Overflow用户
提问于 2017-04-30 10:53:46
回答 1查看 45关注 0票数 1

需要查找包含条件的单个<script> condition </script>。下面的示例包含4个标签,我需要匹配包含条件的第二个标签,并丢弃其他标签。从<script>开始。之前的条件可以是空格或换行符,然后像if (window.location.href == bar) { }和than这样的条件可以是空格或换行符,以及结束</script>。

代码语言:javascript
复制
<script>                  <!-- discard --->
other stuff
not to be found
</script>                 


<script>                  <!-- MATCH --->

if (window.location.href == bar) {         
do something                 
}

</script>                

<script>                 <!-- discard --->
other stuff
not to be found
</script>                

<script>                 <!-- discard --->
other stuff
not to be found
</script>

提前感谢

EN

回答 1

Stack Overflow用户

发布于 2017-04-30 10:58:31

在这里,您应该使用DOMDocument而不是Regex来匹配标记及其所需内容。

代码语言:javascript
复制
<?php
ini_set('display_errors', 1);
$object= new DOMDocument();
$object->loadHTML('<html><body><script>                  <!-- discard --->
other stuff
not to be found
</script>                 

<script>                  <!-- MATCH --->

if (window.location.href == bar) {         
do something                 
}

</script>                

<script>                 <!-- discard --->
other stuff
not to be found
</script>                

<script>                 <!-- discard --->
other stuff
not to be found
</script></body></html>');
$tagsToRemove=array();
foreach($object->getElementsByTagName("script") as $element)
{
    if($element instanceof  DOMElement)
    {
        if(!preg_match("/if\s*\(/i", $element->nodeValue))
        {
            $tagsToRemove[]=$element;
        }
    }
}
foreach($tagsToRemove as $element)
{
    $element->parentNode->removeChild($element);
}
echo $object->saveHTML();
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43702468

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档