From 6d03e5e5540a5196db48e1e4350de45f4e9bc619 Mon Sep 17 00:00:00 2001 From: Zig Tan Date: Fri, 29 Jun 2018 12:25:41 +0800 Subject: [PATCH] MDL-61052 assign: Improve strip_images() to avoid HTML5 tags errors --- .../editpdf/classes/document_services.php | 27 +++++++++---------- 1 file changed, 13 insertions(+), 14 deletions(-) diff --git a/mod/assign/feedback/editpdf/classes/document_services.php b/mod/assign/feedback/editpdf/classes/document_services.php index fa6dbfbb598..71477b7c435 100644 --- a/mod/assign/feedback/editpdf/classes/document_services.php +++ b/mod/assign/feedback/editpdf/classes/document_services.php @@ -120,25 +120,24 @@ EOD; * @return string New html with no image tags. */ protected static function strip_images($html) { + // Load HTML and suppress any parsing errors (DOMDocument->loadHTML() does not current support HTML5 tags). $dom = new DOMDocument(); - $dom->loadHTML("" . $html); - $images = $dom->getElementsByTagName('img'); - $i = 0; + libxml_use_internal_errors(true); + $dom->loadHTML('' . $html); + libxml_clear_errors(); - for ($i = ($images->length - 1); $i >= 0; $i--) { - $node = $images->item($i); + // Find all img tags. + if ($imgnodes = $dom->getElementsByTagName('img')) { + // Replace img nodes with the img alt text without overriding DOM elements. + for ($i = ($imgnodes->length - 1); $i >= 0; $i--) { + $imgnode = $imgnodes->item($i); + $alt = ($imgnode->hasAttribute('alt')) ? ' [ ' . $imgnode->getAttribute('alt') . ' ] ' : ' '; + $textnode = $dom->createTextNode($alt); - if ($node->hasAttribute('alt')) { - $replacement = ' [ ' . $node->getAttribute('alt') . ' ] '; - } else { - $replacement = ' '; + $imgnode->parentNode->replaceChild($textnode, $imgnode); } - - $text = $dom->createTextNode($replacement); - $node->parentNode->replaceChild($text, $node); } - $count = 1; - return str_replace("", "", $dom->saveHTML(), $count); + return preg_replace('/^<\?xml[^>[]*(\[[^]]*\])?>/', '', $dom->saveHTML()); } /**