如何从源文件中提取 HTML 元素


How to extract HTML element from a source file

我需要替换源代码中由标签ID标识的HTML部分,这是使用PHP的HTML和PHP的组合。如果是纯 HTML,可以使用 DOM 解析器;如果DIV中没有DIV,我可以想象如何使用preg_match。这就是我要做的 - 我有一个代码(加载到字符串中),如下所示:

<div>
  <img >
</div>
<? include(); ?>
<div id="mydiv">
   <div>
      <div>
        <img >
      </div>
   </div>
</div>

我的任务是用新的内容替换"mydiv"DIV 的内容,例如

<div id="newdiv>
  some text
</div>

所以字符串在更改后将如下所示:

<div>
  <img >
</div>
<? include(); ?>
<div id="mydiv">
  <div id="newdiv>
    some text
  </div>
</div>

我已经尝试过:

1)使用DOMdocument的loadHTML解析代码=>如果包含PHP代码,它会产生很多错误。

2)我玩了一下像preg_match_all('/<div id="myid"([^<]*)<'/div>/', $src, $matches)这样的正则表达式,如果包含更多子div,它会失败。

到目前为止,我发现的最好的方法是:

1)查找id="mydiv"字符串

2)搜索"<"和">"字符并像"<"= 1和">"=-1一样计算它们(不完全是,但它给出了想法)

3)一旦我得到sum == 0我应该在结束标签的位置上,所以我知道,我应该交换哪个部分字符串

这是一个非常"繁重"的解决方案,在某些情况下可能会停止工作,其中代码是不同的(例如,页面上的PHP代码也包含字符,而不仅仅是简单的"include")。所以我正在寻找一些更好的解决方案。

你可以尝试这样的事情:

$file = 'filename.php';
$content = file_get_contents($file);
$array_one = explode( '<div id="mydiv">' , $content );
$my_div_content = explode("</div>" , $array_one[1] )[0];

或者像你说的那样使用preg_match:

preg_match('/<div id="mydiv"(.*?)<'/div>/s', $content, $matches)

是的,有。首先,您需要使用一个将获取文件内容的函数。让我们调用文件主页.php:

$homepageString = file_get_contents('homepage.php');

现在,您有一个包含所有内容的字符串。接下来你要做的是使用 preg_replace() 函数取出你想要取出的代码部分:

$newHomepageString = preg_replace('/id="mydiv"/',"", $homepageString);

现在,您用新的源代码覆盖现有的主页.php文件:

file_put_contents("homepage.php", $newHomepageString);

让我知道它是否对你有用! :)