diff options
| -rw-r--r-- | program/include/rcube_bc.inc | 4 | ||||
| -rw-r--r-- | program/include/rcube_mime.php | 18 | ||||
| -rw-r--r-- | program/lib/html2text.php | 17 | ||||
| -rw-r--r-- | program/steps/mail/sendmail.inc | 8 | ||||
| -rw-r--r-- | program/steps/utils/html2text.inc | 4 | 
5 files changed, 34 insertions, 17 deletions
| diff --git a/program/include/rcube_bc.inc b/program/include/rcube_bc.inc index 1894873e6..4130d4dc5 100644 --- a/program/include/rcube_bc.inc +++ b/program/include/rcube_bc.inc @@ -338,9 +338,9 @@ function show_bytes($bytes)      return rcmail::get_instance()->show_bytes($bytes);  } -function rc_wordwrap($string, $width=75, $break="\n", $cut=false) +function rc_wordwrap($string, $width=75, $break="\n", $cut=false, $charset=null)  { -    return rcube_mime::wordwrap($string, $width, $break, $cut); +    return rcube_mime::wordwrap($string, $width, $break, $cut, $charset);  }  function rc_request_header($name) diff --git a/program/include/rcube_mime.php b/program/include/rcube_mime.php index 2dbeaf67a..ac3ef9e8a 100644 --- a/program/include/rcube_mime.php +++ b/program/include/rcube_mime.php @@ -529,10 +529,11 @@ class rcube_mime       *       * @param string $text Text to wrap       * @param int $length Length +     * @param string $charset Character encoding of $text       *       * @return string Wrapped text       */ -    public static function format_flowed($text, $length = 72) +    public static function format_flowed($text, $length = 72, $charset=null)      {          $text = preg_split('/\r?\n/', $text); @@ -542,10 +543,10 @@ class rcube_mime                      $prefix = $regs[0];                      $level = strlen($prefix);                      $line  = rtrim(substr($line, $level)); -                    $line  = $prefix . self::wordwrap($line, $length - $level - 2, " \r\n$prefix "); +                    $line  = $prefix . self::wordwrap($line, $length - $level - 2, " \r\n$prefix ", false, $charset);                  }                  else if ($line) { -                    $line = self::wordwrap(rtrim($line), $length - 2, " \r\n"); +                    $line = self::wordwrap(rtrim($line), $length - 2, " \r\n", false, $charset);                      // space-stuffing                      $line = preg_replace('/(^|\r\n)(From| |>)/', '\\1 \\2', $line);                  } @@ -565,12 +566,16 @@ class rcube_mime       * @param int    $width   Line width       * @param string $break   Line separator       * @param bool   $cut     Enable to cut word +     * @param string $charset Charset of $string       *       * @return string Text       */ -    public static function wordwrap($string, $width=75, $break="\n", $cut=false) +    public static function wordwrap($string, $width=75, $break="\n", $cut=false, $charset=null)      { -        $para   = explode($break, $string); +        if ($charset) +            mb_internal_encoding($charset); + +        $para   = preg_split('/\r?\n/', $string);          $string = '';          while (count($para)) { @@ -624,6 +629,9 @@ class rcube_mime              }          } +        if ($charset) +            mb_internal_encoding(RCMAIL_CHARSET); +          return $string;      } diff --git a/program/lib/html2text.php b/program/lib/html2text.php index dd413e0d6..34c719302 100644 --- a/program/lib/html2text.php +++ b/program/lib/html2text.php @@ -135,6 +135,14 @@ class html2text      var $width = 70;      /** +     *  Target character encoding for output text +     * +     *  @var string $charset +     *  @access public +     */ +    var $charset = 'UTF-8'; + +    /**       *  List of preg* regular expression patterns to search for,       *  used in conjunction with $replace.       * @@ -347,7 +355,7 @@ class html2text       *  @access public       *  @return void       */ -    function html2text( $source = '', $from_file = false, $do_links = true, $width = 75 ) +    function html2text( $source = '', $from_file = false, $do_links = true, $width = 75, $charset = 'UTF-8' )      {          if ( !empty($source) ) {              $this->set_html($source, $from_file); @@ -356,6 +364,7 @@ class html2text          $this->set_base_url();          $this->_do_links = $do_links;          $this->width = $width; +        $this->charset = $charset;      }      /** @@ -517,7 +526,7 @@ class html2text          $text = preg_replace($this->ent_search, $this->ent_replace, $text);          // Replace known html entities -        $text = html_entity_decode($text, ENT_QUOTES, 'UTF-8'); +        $text = html_entity_decode($text, ENT_QUOTES, $this->charset);          // Remove unknown/unhandled entities (this cannot be done in search-and-replace block)          $text = preg_replace('/&([a-zA-Z0-9]{2,6}|#[0-9]{2,4});/', '', $text); @@ -732,14 +741,14 @@ class html2text       */      private function _strtoupper($str)      { -        $str = html_entity_decode($str, ENT_COMPAT, RCMAIL_CHARSET); +        $str = html_entity_decode($str, ENT_COMPAT, $this->charset);          if (function_exists('mb_strtoupper'))              $str = mb_strtoupper($str);          else              $str = strtoupper($str); -        $str = htmlspecialchars($str, ENT_COMPAT, RCMAIL_CHARSET); +        $str = htmlspecialchars($str, ENT_COMPAT, $this->charset);          return $str;      } diff --git a/program/steps/mail/sendmail.inc b/program/steps/mail/sendmail.inc index 348ac9b96..9f5080d0f 100644 --- a/program/steps/mail/sendmail.inc +++ b/program/steps/mail/sendmail.inc @@ -559,8 +559,8 @@ if ($isHtml) {    $plugin['body'] = rcmail_replace_emoticons($plugin['body']);    // add a plain text version of the e-mail as an alternative part. -  $h2t = new html2text($plugin['body'], false, true, 0); -  $plainTextPart = rc_wordwrap($h2t->get_text(), $LINE_LENGTH, "\r\n"); +  $h2t = new html2text($plugin['body'], false, true, 0, $message_charset); +  $plainTextPart = rc_wordwrap($h2t->get_text(), $LINE_LENGTH, "\r\n", false, $message_charset);    $plainTextPart = wordwrap($plainTextPart, 998, "\r\n", true);    // make sure all line endings are CRLF (#1486712) @@ -586,9 +586,9 @@ else {    // compose format=flowed content if enabled    if ($flowed = $RCMAIL->config->get('send_format_flowed', true)) -    $message_body = rcube_mime::format_flowed($message_body, min($LINE_LENGTH+2, 79)); +    $message_body = rcube_mime::format_flowed($message_body, min($LINE_LENGTH+2, 79), $message_charset);    else -    $message_body = rc_wordwrap($message_body, $LINE_LENGTH, "\r\n"); +    $message_body = rc_wordwrap($message_body, $LINE_LENGTH, "\r\n", false, $message_charset);    $message_body = wordwrap($message_body, 998, "\r\n", true); diff --git a/program/steps/utils/html2text.inc b/program/steps/utils/html2text.inc index 67e76c1a7..e17665fec 100644 --- a/program/steps/utils/html2text.inc +++ b/program/steps/utils/html2text.inc @@ -5,7 +5,7 @@   | program/steps/utils/html2text.inc                                     |   |                                                                       |   | This file is part of the Roundcube Webmail client                     | - | Copyright (C) 2005-2010, The Roundcube Dev Team                       | + | Copyright (C) 2005-2012, The Roundcube Dev Team                       |   |                                                                       |   | Licensed under the GNU General Public License version 3 or            |   | any later version with exceptions for skins & plugins.                | @@ -24,7 +24,7 @@ $html = $HTTP_RAW_POST_DATA;  // Replace emoticon images with its text representation  $html = rcmail_replace_emoticons($html); -$converter = new html2text($html); +$converter = new html2text($html, false, true, 0);  header('Content-Type: text/plain; charset=UTF-8');  print rtrim($converter->get_text()); | 
