我需要在源代码中替换由标记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;)。所以我看起来是一个更好的解决方案。
答案 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);
让我知道它是否适合你! :)