Php:删除多个子标记(脚本)
需要找到一个包含条件的Php:删除多个子标记(脚本),php,domdocument,Php,Domdocument,需要找到一个包含条件的条件。 下面的示例包含4个标记,我需要匹配包含条件的第二个标记并丢弃其他标记。以开头。在此之前,条件可以是空格或新行,而不是类似于if(window.location.href==bar){}的条件,然后可以是空格或新行,最后是 <script> <!-- discard ---> other stuff not to be found </script> <s
条件
。
下面的示例包含4个标记,我需要匹配包含条件的第二个标记并丢弃其他标记。以
开头。在此之前,条件可以是空格或新行,而不是类似于if(window.location.href==bar){}
的条件,然后可以是空格或新行,最后是
<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>
其他东西
找不到
如果(window.location.href==bar){
做点什么
}
其他东西
找不到
其他东西
找不到
提前感谢这里您应该使用
DOMDocument
而不是Regex
来匹配标记及其所需内容
这里您应该使用DOMDocument
而不是Regex
来匹配标记及其所需内容
我希望您期望得到这个结果。我希望您期望得到这个结果。实际上,我正在使用cURL获取html。@Avel您能分享完整的html吗?但我认为我上面的例子也适用于完整的HTML。事实上,我正在使用cURL来获取HTML。@Avel你能分享完整的HTML吗?但我认为我上面的例子也适用于完整的HTML
<?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();