Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do I insert HTML into a PHP DOM object? [duplicate]

Tags:

dom

php

I am using PHP's DOM object to create HTML pages for my website. This works great for my head, however since I will be entering a lot of HTML into the body (not via DOM), I would think I would need to use DOM->createElement($bodyHTML) to add my HTML from my site to the DOM object.

However DOM->createElement seems to parse all HTML entities so my end result ended up displaying the HTML on the page and not the actual renders HTML.

I am currently using a hack to get this to work,

$body = $this->DOM
             ->createComment('DOM Glitch--><body>'.$bodyHTML."</body><!--Woot");

Which puts all my site code in a comment, which I bypass athe comment and manually add the <body> tags.

Currently this method works, but I believe there should be a more proper way of doing this. Ideally something like DOM->createElement() that will not parse any of the string.

I also tried using DOM->createDocumentFragment() However it does not like some of the string so it would error and not work (Along with take up extra CPU power to re-parse the body's HTML).

So, my question is, is there a better way of doing this other than using DOM->createComment()?

like image 996
lanrat Avatar asked Feb 12 '10 21:02

lanrat


People also ask

Can you manipulate DOM with PHP?

So if you're ever working with the content for a post (a post type or a custom post type, for that matter) and you need to manipulate tags much like you would with JavaScript, then using the DomDocument library is one of the most powerful tools are your disposal.

What is DOM in PHP?

Introduction. The Document Object Model (DOM) is a programming API for HTML and XML documents. It defines the logical structure of documents and the way a document is accessed and manipulated.


1 Answers

You use the DOMDocumentFragment objec to insert arbitrary HTML chunks into another document.

$dom = new DOMDocument();
@$dom->loadHTML($some_html_document); // @ to suppress a bajillion parse errors

$frag = $dom->createDocumentFragment(); // create fragment
$frag->appendXML($some_other_html_snippet); // insert arbitary html into the fragment

$node = // some operations to find whatever node you want to insert the fragment into

$node->appendChild($frag); // stuff the fragment into the original tree
like image 156
Marc B Avatar answered Oct 17 '22 02:10

Marc B