Я использую 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> this is a really html string ©</div><i></i> with all the © 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 и просто использовать строки.