Skip to content

Commit 6e69dfe

Browse files
author
James Ellis
committed
FIX: implement LIBXML_HTML_NOIMPLIED to avoid html/head being included, use getElementsByTagName to add nodes
1 parent 1a9b118 commit 6e69dfe

File tree

1 file changed

+17
-8
lines changed

1 file changed

+17
-8
lines changed

src/Backend.php

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -369,27 +369,36 @@ private function includeInHTMLViaDOMDocument($html) {
369369

370370
if ($script_requirements) {
371371
// add scripts
372-
$fragment->loadHTML( $script_requirements, LIBXML_HTML_NODEFDTD );
373-
$body->appendChild( $dom->importNode( $fragment->documentElement, true) );
372+
$fragment->loadHTML( $script_requirements, LIBXML_HTML_NODEFDTD | LIBXML_HTML_NOIMPLIED );
373+
foreach($fragment->getElementsByTagName('script') as $script) {
374+
$body->appendChild( $dom->importNode( $script, true) );
375+
}
374376
}
375377

376378
if ($lazy_css_requirements) {
377379
// Lazy css requirements end up as <link> tags before the </body> - non critical CSS
378-
$fragment->loadHTML( $lazy_css_requirements, LIBXML_HTML_NODEFDTD );
379-
$body->appendChild( $dom->importNode( $fragment->documentElement, true) );
380+
$fragment->loadHTML( $lazy_css_requirements, LIBXML_HTML_NODEFDTD | LIBXML_HTML_NOIMPLIED );
381+
foreach($fragment->getElementsByTagName('link') as $link) {
382+
$body->appendChild( $dom->importNode( $link, true) );
383+
}
380384
}
381385

382386
if ($css_requirements) {
383387
// Put standard CSS requirements at base of </head>
384-
$fragment->loadHTML( $css_requirements, LIBXML_HTML_NODEFDTD );
385-
$head->appendChild( $dom->importNode( $fragment->documentElement, true) );
388+
$fragment->loadHTML( $css_requirements, LIBXML_HTML_NODEFDTD | LIBXML_HTML_NOIMPLIED);
389+
foreach($fragment->getElementsByTagName('link') as $link) {
390+
$head->appendChild( $dom->importNode( $link, true) );
391+
}
386392
}
387393

388394
if ($head_requirements) {
389395
// Put <head> requirements at base of </head>
390-
$fragment->loadHTML( $head_requirements, LIBXML_HTML_NODEFDTD );
391-
$head->appendChild( $dom->importNode( $fragment->documentElement, true) );
396+
$fragment->loadHTML( $head_requirements, LIBXML_HTML_NODEFDTD | LIBXML_HTML_NOIMPLIED );
397+
foreach($fragment->getElementsByTagName('*') as $node) {
398+
$head->appendChild( $dom->importNode( $node, true) );
399+
}
392400
}
401+
393402
}
394403
$end = microtime(true);
395404

0 commit comments

Comments
 (0)