From: Michael M Slusarz Date: Thu, 19 Aug 2010 17:22:40 +0000 (-0600) Subject: Do better job of handling charsets with DOM parsing X-Git-Url: https://git.internetallee.de/?a=commitdiff_plain;h=e43321b45fae1e5453fe496fb485a70666fcaa22;p=horde.git Do better job of handling charsets with DOM parsing --- diff --git a/imp/view.php b/imp/view.php index 4be0a0e26..4ef84546e 100644 --- a/imp/view.php +++ b/imp/view.php @@ -289,15 +289,24 @@ case 'print_attach': $key = key($render); $browser->downloadHeaders($render[$key]['name'], $render[$key]['type'], true, strlen($render[$key]['data'])); if ($browser->isBrowser('mozilla')) { - /* Silence errors from parsing HTML. */ + $pstring = Horde_Mime::decodeParam('content-type', $render[$key]['type']); + $old_error = libxml_use_internal_errors(true); - $doc = DOMDocument::loadHTML($render[$key]['data']); + $doc = new DOMDocument(); + $doc->loadHTML($render[$key]['data']); + if (!$doc->encoding) { + /* If libxml can't auto-detect encoding, convert to + * ISO-8859-1 manually. */ + $doc->loadHTML(Horde_String::convertCharset($render[$key]['data'], $pstring['params']['charset'], 'ISO-8859-1')); + } if (!$old_error) { libxml_use_internal_errors(false); } + $bodyelt = $doc->getElementsByTagName('body')->item(0); $bodyelt->insertBefore($doc->importNode($div, true), $bodyelt->firstChild); - echo $doc->saveHTML(); + + echo Horde_String::convertCharset($doc->saveHTML(), $doc->encoding, $pstring['params']['charset']); } else { echo $render[$key]['data']; }