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

时间:2016-04-24 13:11:03

标签: php html extract

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

<div>
  <img >
</div>

<? include(); ?>

<div id="mydiv">
   <div>
      <div>
        <img >
      </div>
   </div>
</div>

我的任务是替换&#34; mydiv&#34;的内容。 DIV用新的例如。

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

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

<div>
  <img >
</div>

<? include(); ?>

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

我已经尝试过了:

1)使用DOMdocument&#39; s loadHTML =&gt;解析代码如果包含PHP代码,它会产生很多错误。

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

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

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

2)搜索&#39;&lt;&#39;和&#39;&gt;&#39; chars并将它们统计为&#39;&lt;&#39; = 1和&#39;&gt;&#39; = - 1(不完全是,但它给出了这个想法)

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

这是非常重的&#34;解决方案,在某些情况下可能会停止工作,代码是不同的(例如,页面上的PHP代码也包含字符,而不仅仅是简单的&#34; include&#34;)。所以我看起来是一个更好的解决方案。

2 个答案:

答案 0 :(得分:0)

您可以尝试这样的事情:

$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)

答案 1 :(得分:0)

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

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

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

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

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

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

让我知道它是否适合你! :)