如何使用PHP从外部html文件中删除具有特定ID的div?

时间:2019-04-15 16:21:08

标签: php html

如何使用PHP从外部html文件中删除具有特定ID的div?

这是 index.php 的一部分:

<div id="linkovi">text to be deleted</div>

我制作了一个PHP脚本,该脚本使同一个div的ID每次运行时都会更改。现在,我需要一种删除那些div的方法。真正的问题是,如果我要删除我不想删除的其他两个div之间的其中一个div,如下所示:

<div id="linkovi">text to be deleted</div>
<div id="linkovi1">text to be deleted 1</div> <!-- Div that should be deleted-->
<div id="linkovi2">text to be deleted 2</div>

是否可以删除两者之间的div?

3 个答案:

答案 0 :(得分:2)

这有效:

function deleteDivById($a,$b) {
    $x = file_get_contents($b);
    $y = '<did id="'.$a.'">';
    $dom = new DOMDocument;
    $dom->loadHTML($x);
    $xPath = new DOMXPath($dom);
    $nodes = $xPath->query('//*[@id="'.$a.'"]');
    if($nodes->item(0)) {
        $nodes->item(0)->parentNode->removeChild($nodes->item(0));
    }
    $z = preg_replace('/^<!DOCTYPE.+?>/', '', str_replace( array('<html>', '</html>', '<body>', '</body>'), array('', '', '', ''), $dom->saveHTML()));
    echo $z;
 }

用法:

 deleteDivById('linkovi1','htmlfile.html');

希望这会有所帮助!

答案 1 :(得分:0)

另一种解决方案:

function removeElements($elementSelectors) {

    // Create a javascript array of selectors
    $jsArray = '[ ';

    foreach($elementSelectors as $selector) {
        $jsArray .= "'" . $selector . "', ";
    }

    $jsArray = substr($jsArray, 0, -2); // remove last ","
    $jsArray .= ' ]';

    $script = '(() => ' . $jsArray . '.map(selector => document.querySelector(selector))'; // searches for the element
    $script .= '.filter(element => !!element).forEach(element => element.remove()))();';

    echo '<script>' . $script . '</script>';
}

通过这样的呼叫:

removeElements(array('#some-element', '#other-element'));

输出为:

<script>(() => [ '#some-element', '#other-element' ].map(selector => document.querySelector(selector)).filter(element => !!element).forEach(element => element.remove()))();</script>

此php函数创建一个立即调用的javascript函数,该函数将删除给定的元素。可以将ID作为选择器使用。

答案 2 :(得分:0)

我制作了一个函数,该函数实际上可以从目标文件中查找和删除<div>。 这是功能:

function delete_div($file, $target, $replacement, $from, $to){
    $side = file($file, FILE_IGNORE_NEW_LINES);
    $reading = fopen($from, 'r');
    $writing = fopen($to, 'w');

    $replaced = false;

    while (!feof($reading)) {
        $line = fgets($reading);
           if (stristr($line,$target)) {
              $line = $replacement;
              $replaced = true;
           }
        fputs($writing, $line);
    }
    fclose($reading); fclose($writing);
    if ($replaced){
       rename($to, $from);
    } else {
       unlink($to);
    }
}

$file是要在其中删除div的文件。

$target是div或您要替换的任何其他元素(在$target中,您必须指定div中的内容,结束标记和开始标记以及空格,也就是。) )。

$replacement是您要替换div的内容(在我的情况下是”,这意味着什么也没有)。

$from是要重命名文件(在此过程中,文件中的所有内容都会放入一个临时文件中,并且在替换div之后,该文件将被重命名为其原始名称。我知道我可以只是使用$file数据,而不是在函数中添加其他参数,但是我这样写是为了防止有人在替换div后重命名文件)。

$to是临时文件的名称(只要将扩展名放在文件名后,命名临时文件就没有关系,因为替换div后临时文件会被删除)

所以您可以使用如下功能:

delete_div('index.php', '<div id="linkovi1">text to be deleted 1</div>', '', 'index.php', 'rip.tmp');