From 24585b8ce667b06f298491c52b34291e914a5b49 Mon Sep 17 00:00:00 2001
From: thomascube <thomas@roundcube.net>
Date: Fri, 31 Jul 2009 04:14:37 -0400
Subject: [PATCH] Prevent from having two meta tags in html code

---
 program/steps/mail/func.inc |   20 +++++++++++---------
 1 files changed, 11 insertions(+), 9 deletions(-)

diff --git a/program/steps/mail/func.inc b/program/steps/mail/func.inc
index 2a301ae..21f0fed 100644
--- a/program/steps/mail/func.inc
+++ b/program/steps/mail/func.inc
@@ -686,16 +686,18 @@
   $html = preg_replace_callback('/(<[\/!]*)([^ >]+)/', '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 = '/(\s+content=[\'"]?\w+\/\w+;\s*charset)=([a-z0-9-_]+)/i';
-  if (preg_match($charset_pattern, $html)) {
-    $html = preg_replace($charset_pattern, '\\1='.RCMAIL_CHARSET, $html);
+  // -> change charset specification in HTML accordingly
+  $charset_pattern = '(content=[\'"]?\w+\/\w+;\s*charset)=([a-z0-9-_]+)';
+  if (preg_match("/<meta\s+[^>]*$charset_pattern/Ui", $html)) {
+    $html = preg_replace("/\s+$charset_pattern/i", '\\1='.RCMAIL_CHARSET, $html);
   }
-  // add head for malformed messages, washtml cannot work without that
-  if (!preg_match('/<head[^>]*>(.*)<\/head>/Uims', $html))
-    $html = '<head></head>'. $html;
-  $html = substr_replace($html, '<meta http-equiv="Content-Type" content="text/html; charset='.RCMAIL_CHARSET.'" />', intval(stripos($html, '<head>')+6), 0);
-
+  else {
+    // add meta content-type to malformed messages, washtml cannot work without that
+    if (!preg_match('/<head[^>]*>(.*)<\/head>/Uims', $html))
+      $html = '<head></head>'. $html;
+    $html = substr_replace($html, '<meta http-equiv="Content-Type" content="text/html; charset='.RCMAIL_CHARSET.'" />', intval(stripos($html, '<head>')+6), 0);
+  }
+  
   // turn relative into absolute urls
   $html = rcmail_resolve_base($html);
 

--
Gitblit v1.9.1