Manipulate HTML from php

孤街浪徒 提交于 2019-12-01 06:04:50

You can use PHP's DOM classes/functions to do this.

Start by creating/loading your document:

$d = new DOMDocument();
$d->loadHTML($yourWellFormedHTMLString);

Then you'll want to locate the document node that you want to alter. You can do this using XPath:

$xpathsearch = new DOMXPath($d);
$nodes = $xpathsearch->query('//div[contains(@class,'main')]');  

Then you'll want to iterate over matching nodes, and create new nodes inside:

foreach($nodes as $node) {
    $newnode = $d->createDocumentFragment();
    $newnode->appendXML($yourCodeYouWantToFillIn);
    $node->appendChild($newnode);
}

If you don't mind messing around with a library at an early stage of development, take a look at CAST (content-addressed style templating). It's pretty much designed to do what you're describing, and if nothing else, you could peer inside the source to see examples.

(NOTE: I'm sure the astute will note that //div[contains(@class,'main')] isn't exactly the equivalent of the CSS selector div.main ... since the class attribute can contain more than one class. Doing this precisely is unwieldy enough I think it's better to start with the simplified expression when you're introducing people to it, even if it might best for those who go this route to eventually get to know xpath well enough to handle this right. Or, just use ids more instead of classes. :)

If it just needs to include a static fragment

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

If it needs to include the output of another PHP script

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

You read the file with:

$fileContents=file_get_contents($file_path);

http://php.net/manual/en/function.file-get-contents.php

Then you search and replace the div content:

$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

My regular expression is a little rusty, but you can scoop it up in here: http://www.regular-expressions.info/tutorial.html

Then save the new content:

file_put_contents($file_path,$newHtmlContent);

http://www.php.net/manual/en/function.file-put-contents.php

Or you could parse the file using this: http://simplehtmldom.sourceforge.net/ But it must be well formed.

I would recommend this version as the above will fail if the contet of the main div is another div...

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!