Как вставить HTML в объект PHP DOM?

Я использую PHP-объект DOM для создания HTML-страниц для моего сайта. Это отлично работает для моей головы, однако, поскольку я буду вводить много HTML в тело (а не через DOM), я бы подумал, что мне нужно будет использовать DOM->createElement($bodyHTML) чтобы добавить мой HTML с моего сайта в объект DOM.

Однако DOM->createElement видимому, анализирует все элементы HTML, поэтому мой конечный результат закончил отображение HTML на странице, а не фактическое отображение HTML.

В настоящее время я использую хак, чтобы заставить это работать,

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

Который помещает весь мой код сайта в комментарий, который я обойду в комментарии и вручную добавлю теги <body> .

В настоящее время этот метод работает, но я считаю, что должен быть более правильный способ сделать это. В идеале что-то вроде DOM->createElement() , которое не будет анализировать ни одну из строк.

Я также попытался использовать DOM->createDocumentFragment() Однако ему не нравится какая-то строка, поэтому она будет ошибочной и не работать (наряду с дополнительной загрузкой процессора для повторного анализа HTML-кода тела).

Итак, мой вопрос: есть ли лучший способ сделать это, кроме использования DOM->createComment() ?

Вы используете объект DOMDocumentFragment objec для вставки произвольных фрагментов HTML в другой документ.

 $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 

Я нашел решение, но это не чисто php-решение, но работает очень хорошо. Маленький взлом для всех, кто потерял бесчисленные часы, как и я, исправить это

 $dom = new DomDocument; // main object $object = $dom->createElement('div'); // html attribute $attr = $dom->createAttribute('value'); // ugly html string $attr->value = "<div>&nbsp; this is a really html string &copy;</div><i></i> with all the &copy; that XML hates!"; $object->appendChild($attr); // jquery fix (or javascript as well) $('div').html($(this).attr('value')); // and it works! $('div').removeAttr('value'); // to clean-up 

loadHTML работает просто отлично.

 <?php $dom = new DOMDocument(); $dom->loadHTML("<font color='red'>Hey there mrlanrat!</font>"); echo $dom->saveHTML(); ?> 

который выводит Привет, мрланрат! в красном.

или

 <?php $dom = new DOMDocument(); $bodyHTML = "here is the body, a nice body I might add"; $dom->loadHTML("<body> " . $bodyHTML . " </body>"); // this would even work as well. // $bodyHTML = "<body>here is the body, a nice body I might add</body>"; // $dom->loadHTML($bodyHTML); echo $dom->saveHTML(); ?> 

Какие результаты:

вот тело, приятное тело, которое я мог бы добавить, и внутри вашего исходного кода HTML, его обернутые внутри тегов body .

Я потратил много времени на ответ Энтони Форлони, но я не могу заставить html присоединяться к телу без ошибок.

@Mark B: Я пробовал это делать, но, как я уже сказал в комментариях, это ошибка на моем html.

Я забыл добавить ниже, мое решение:

Я решил сделать мой html-объект намного проще и позволить мне сделать это, не используя DOM и просто использовать строки.