From 104e23530255676a80919b772233bc5dbbd9a3bd Mon Sep 17 00:00:00 2001 From: alecpl Date: Sun, 23 Oct 2011 08:49:35 +0000 Subject: - Improve handling of malformed charset specification in HTML messages (#1488093) --- program/steps/mail/func.inc | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/program/steps/mail/func.inc b/program/steps/mail/func.inc index 6ece17511..f1cc30471 100644 --- a/program/steps/mail/func.inc +++ b/program/steps/mail/func.inc @@ -590,16 +590,16 @@ function rcmail_wash_html($html, $p = array(), $cid_replaces) $html = preg_replace_callback('/(<[\/]*)([^\s>]+)/', 'rcmail_html_tag_callback', $html); // charset was converted to UTF-8 in rcube_imap::get_message_part(), - // -> change charset specification in HTML accordingly - $charset_pattern = '(]*content=)[\'"]?(\w+\/\w+;\s*charset=)([a-z0-9-_]+[\'"]?)'; - if (preg_match("/$charset_pattern/Ui", $html)) { - $html = preg_replace("/$charset_pattern/i", '\\1"\\2'.RCMAIL_CHARSET.'"', $html); - } - else { - // add meta content-type to malformed messages, washtml cannot work without that - if (!preg_match('/]*>(.*)<\/head>/Uims', $html)) - $html = ''. $html; - $html = substr_replace($html, '', intval(stripos($html, '')+6), 0); + // change/add charset specification in HTML accordingly, + // washtml cannot work without that + $meta = ''; + + // remove old meta tag and add the new one, making sure + // that it is placed in the head (#1488093) + $html = preg_replace('/]+charset=[a-z0-9-_]+[^>]*>/Ui', '', $html); + $html = preg_replace('/(]*>)/Ui', '\\1'.$meta, $html, -1, $rcount); + if (!$rcount) { + $html = '' . $meta . '' . $html; } // turn relative into absolute urls -- cgit v1.2.3