From 7a6d65eedb263c2e2336a8218ecd5f164827c49f Mon Sep 17 00:00:00 2001 From: cescobedo Date: Tue, 13 Jul 2021 11:05:32 +0200 Subject: [PATCH] MDL-72139 core_message: Fix encoding UTF-8 in prevent unclosed tags --- message/classes/helper.php | 24 +++++++++++++----------- message/tests/helper_test.php | 3 +++ 2 files changed, 16 insertions(+), 11 deletions(-) diff --git a/message/classes/helper.php b/message/classes/helper.php index 3d1e0e4a1f7..39b7a354a1b 100644 --- a/message/classes/helper.php +++ b/message/classes/helper.php @@ -690,18 +690,20 @@ class helper { public static function prevent_unclosed_html_tags( string $message, bool $removebody = false - ) : string - { - $html = ''; - if (!empty($message)) { - $doc = new DOMDocument(); - @$doc->loadHTML($message); - $html = $doc->getElementsByTagName('body')->item(0)->C14N(false, true); - if ($removebody) { - // Remove element added in C14N function. - $html = preg_replace('~<(/?(?:body))[^>]*>\s*~i', '', $html); - } + ) : string { + $html = ''; + if (!empty($message)) { + $doc = new DOMDocument(); + $olderror = libxml_use_internal_errors(true); + $doc->loadHTML('' . $message); + libxml_clear_errors(); + libxml_use_internal_errors($olderror); + $html = $doc->getElementsByTagName('body')->item(0)->C14N(false, true); + if ($removebody) { + // Remove element added in C14N function. + $html = preg_replace('~<(/?(?:body))[^>]*>\s*~i', '', $html); } + } return $html; } diff --git a/message/tests/helper_test.php b/message/tests/helper_test.php index bf2af9a83b2..49a1f41de6f 100644 --- a/message/tests/helper_test.php +++ b/message/tests/helper_test.php @@ -214,6 +214,9 @@ class core_message_helper_testcase extends advanced_testcase { 'Empty html' => [ '', '', false ], + 'Check encoding UTF-8 is working' => [ + '

Title

السلام عليكم

', '

Title

السلام عليكم

', false + ], ]; } }