从php处理HTML

时间:2010-12-13 09:10:07

标签: php html dom html-manipulation

我有一个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解析器完成吗?谷歌搜索给了我这些条款,但我不知道它们实际上是什么。

3 个答案:

答案 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>