MDL-54853 weblib: Properly specify encoding for blanktarget
[moodle.git] / lib / weblib.php
index e094828..1e24072 100644 (file)
@@ -1320,8 +1320,9 @@ function format_text($text, $format = FORMAT_MOODLE, $options = null, $courseidd
     }
 
     if ($options['blanktarget']) {
+        $encoding = ini_get('default_charset') ? ini_get('default_charset') : 'utf-8';
         $domdoc = new DOMDocument();
-        $domdoc->loadHTML($text);
+        $domdoc->loadHTML('<?xml encoding="' . $encoding . '" ?>' . $text);
         foreach ($domdoc->getElementsByTagName('a') as $link) {
             if ($link->hasAttribute('target') && strpos($link->getAttribute('target'), '_blank') === false) {
                 continue;
@@ -1336,7 +1337,7 @@ function format_text($text, $format = FORMAT_MOODLE, $options = null, $courseidd
         // $domdoc->loadHTML($text, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD); however it seems like the libxml
         // version that travis uses doesn't work properly and ends up leaving <html><body>, so I'm forced to use
         // this regex to remove those tags.
-        $text = trim(preg_replace('~<(?:!DOCTYPE|/?(?:html|body))[^>]*>\s*~i', '', $domdoc->saveHTML()));
+        $text = trim(preg_replace('~<(?:!DOCTYPE|/?(?:html|body))[^>]*>\s*~i', '', $domdoc->saveHTML($domdoc->documentElement)));
     }
 
     return $text;