5

我有一个 html 文件,index.php我想将 a 中的内容<div>与该文件的类一起使用main,并将其替换为另一个文本。我怎样才能做到这一点?

html中的示例内容:

<div class="main">
Replace this text with some code!
</div>

我想使用 php 获取此 div 中的内容并将其替换为其他内容。但我不知道如何做到这一点。

更新: 我知道使用 javascript 的客户端技巧。我想做这个服务器端。该文件将是 html 而不是 php。所以我认为我必须在 php 中打开 html 并执行此操作,尽管我不知道如何操作。

这可以用 xpath 或 html dom 解析器或其他东西来完成吗?谷歌搜索给了我这些术语,但我不知道它们实际上是什么。

4

3 回答 3

17

您可以使用 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 属性可以包含多个类。这样做笨拙,我认为最好从当您向人们介绍它时简化表达,即使它可能最适合那些走这条路的人最终充分了解 xpath 以处理这个权利。或者,只是更多地使用 ids 而不是类。:)

于 2010-12-13T10:14:32.180 回答
1

如果它只需要包含一个静态片段

<div class="main">
<?php readfile ('path/to/some/file'); ?>
</div>

如果它需要包含另一个 PHP 脚本的输出

<div class="main">
<?php include ('path/to/some/file') ?>
</div>
于 2010-12-13T09:54:20.800 回答
0

您使用以下命令阅读文件:

$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,上述将失败...

于 2010-12-13T09:28:19.267 回答