我有一个html文件,index.php
我想将<div>
内容与该文件的类main
一起取出,并将其替换为另一个文本。我怎样才能做到这一点?
html中的示例内容:
<div class="main">
Replace this text with some code!
</div>
我希望使用php获取此div中的内容并将其替换为其他内容。但我不知道如何做到这一点。
更新 我知道使用javascript的客户端技巧。我想做这个服务器端。该文件将是HTML而不是PHP。所以我认为我必须在php中打开html并执行此操作,但我并不确切如何。
这可以用xpath或html dom解析器完成吗?谷歌搜索给了我这些条款,但我不知道它们实际上是什么。
答案 0 :(得分:14)
您可以使用PHP的DOM类/函数来执行此操作。
首先创建/加载您的文档:
$d = new DOMDocument();
$d->loadHTML($yourWellFormedHTMLString);
然后,您将要找到要更改的文档节点。您可以使用XPath执行此操作:
$xpathsearch = new DOMXPath($d);
$nodes = $xpathsearch->query('//div[contains(@class,'main')]');
然后,您将要遍历匹配的节点,并在其中创建新节点:
foreach($nodes as $node) {
$newnode = $d->createDocumentFragment();
$newnode->appendXML($yourCodeYouWantToFillIn);
$node->appendChild($newnode);
}
如果您不介意在开发的早期阶段搞乱图书馆,请查看CAST(内容寻址样式模板)。它几乎被设计用于执行您所描述的内容,如果没有别的,您可以在源代码内查看示例。
(注意:我确信精明的会注意到//div[contains(@class,'main')]
等同于CSS选择器div.main
...因为class属性可以包含多个类。执行此precisely是不够的,我认为当你向人们介绍时,最好从简化表达式开始,即使它最适合那些走这条路的人最终到达知道xpath足以处理这个问题。或者,只使用id而不是类。:)
答案 1 :(得分:1)
您使用以下语言阅读文件:
$fileContents=file_get_contents($file_path);
http://php.net/manual/en/function.file-get-contents.php
然后搜索并替换div内容:
$newHtmlContent=preg_replace("/<div class=\"main\">(.*)</div>/i",'<div class="main">Some text here</div>',$fileContents);
http://php.net/manual/en/function.preg-replace.php
我的正则表达式有点生疏,但你可以在这里舀起来: http://www.regular-expressions.info/tutorial.html
然后保存新内容:
file_put_contents($file_path,$newHtmlContent);
http://www.php.net/manual/en/function.file-put-contents.php
或者您可以使用以下方法解析文件: http://simplehtmldom.sourceforge.net/ 但它必须形成良好。
我会推荐这个版本,因为如果主div的比赛是另一个div,上面的内容将会失败...
答案 2 :(得分:1)
如果只需要包含静态片段
<div class="main">
<?php readfile ('path/to/some/file'); ?>
</div>
如果需要包含另一个PHP脚本的输出
<div class="main">
<?php include ('path/to/some/file') ?>
</div>