Aleksander Machniak
2012-12-12 bb5d7282855dd83ccdd211cb77d0776dce71468e
program/lib/html2text.php
@@ -89,7 +89,7 @@
 *  out that extra spaces should be compressed--a problem addressed with
 *  Marcus Bointon's fixes but that I had not yet incorporated.
 *
 *   Thanks to Daniel Schledermann (http://www.typoconsult.dk/) for
 *  Thanks to Daniel Schledermann (http://www.typoconsult.dk/) for
 *  suggesting a valuable fix with <a> tag handling.
 *
 *  Thanks to Wojciech Bajon (again!) for suggesting fixes and additions,
@@ -135,6 +135,14 @@
    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.
     *
@@ -145,6 +153,7 @@
    var $search = array(
        "/\r/",                                  // Non-legal carriage return
        "/[\n\t]+/",                             // Newlines and tabs
        '/<head[^>]*>.*?<\/head>/i',             // <head>
        '/<script[^>]*>.*?<\/script>/i',         // <script>s -- which strip_tags supposedly has problems with
        '/<style[^>]*>.*?<\/style>/i',           // <style>s -- which strip_tags supposedly has problems with
        '/<p[^>]*>/i',                           // <P>
@@ -172,6 +181,7 @@
    var $replace = array(
        '',                                     // Non-legal carriage return
        ' ',                                    // Newlines and tabs
        '',                                     // <head>
        '',                                     // <script>s -- which strip_tags supposedly has problems with
        '',                                     // <style>s -- which strip_tags supposedly has problems with
        "\n\n",                                 // <P>
@@ -200,7 +210,7 @@
    var $ent_search = array(
        '/&(nbsp|#160);/i',                      // Non-breaking space
        '/&(quot|rdquo|ldquo|#8220|#8221|#147|#148);/i',
                                               // Double quotes
                                         // Double quotes
        '/&(apos|rsquo|lsquo|#8216|#8217);/i',   // Single quotes
        '/&gt;/i',                               // Greater-than
        '/&lt;/i',                               // Less-than
@@ -345,7 +355,7 @@
     *  @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);
@@ -354,6 +364,7 @@
        $this->set_base_url();
        $this->_do_links = $do_links;
        $this->width = $width;
        $this->charset = $charset;
    }
    /**
@@ -437,11 +448,11 @@
    function set_base_url( $url = '' )
    {
        if ( empty($url) ) {
           if ( !empty($_SERVER['HTTP_HOST']) ) {
               $this->url = 'http://' . $_SERVER['HTTP_HOST'];
           } else {
               $this->url = '';
           }
            if ( !empty($_SERVER['HTTP_HOST']) ) {
                $this->url = 'http://' . $_SERVER['HTTP_HOST'];
            } else {
                $this->url = '';
            }
        } else {
            // Strip any trailing slashes for consistency (relative
            // URLs may already start with a slash like "/file.html")
@@ -515,7 +526,7 @@
        $text = preg_replace($this->ent_search, $this->ent_replace, $text);
        // Replace known html entities
        $text = html_entity_decode($text, ENT_COMPAT, '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);
@@ -535,7 +546,7 @@
        // for PHP versions >= 4.0.2. Default width is 75
        // If width is 0 or less, don't wrap the text.
        if ( $this->width > 0 ) {
           $text = wordwrap($text, $this->width);
            $text = wordwrap($text, $this->width);
        }
    }
@@ -554,16 +565,16 @@
     */
    function _build_link_list( $link, $display )
    {
       if (!$this->_do_links || empty($link)) {
           return $display;
       }
        // Ignored link types
       if (preg_match('!^(javascript:|mailto:|#)!i', $link)) {
          return $display;
        if (!$this->_do_links || empty($link)) {
            return $display;
        }
       if (preg_match('!^([a-z][a-z0-9.+-]+:)!i', $link)) {
        // Ignored link types
        if (preg_match('!^(javascript:|mailto:|#)!i', $link)) {
            return $display;
        }
        if (preg_match('!^([a-z][a-z0-9.+-]+:)!i', $link)) {
            $url = $link;
        }
        else {
@@ -730,14 +741,14 @@
     */
    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;
    }