| | |
| | | '/[ ]{2,}/', // Runs of spaces, pre-handling |
| | | '/<script[^>]*>.*?<\/script>/i', // <script>s -- which strip_tags supposedly has problems with |
| | | '/<style[^>]*>.*?<\/style>/i', // <style>s -- which strip_tags supposedly has problems with |
| | | //'/<!-- .* -->/', // Comments -- which strip_tags might have problem a with |
| | | '/<p[^>]*>/i', // <P> |
| | | '/<br[^>]*>/i', // <br> |
| | | '/<i[^>]*>(.*?)<\/i>/i', // <i> |
| | |
| | | '/<li[^>]*>(.*?)<\/li>/i', // <li> and </li> |
| | | '/<li[^>]*>/i', // <li> |
| | | '/<hr[^>]*>/i', // <hr> |
| | | '/<div[^>]*>/i', // <div> |
| | | '/(<table[^>]*>|<\/table>)/i', // <table> and </table> |
| | | '/(<tr[^>]*>|<\/tr>)/i', // <tr> and </tr> |
| | | '/<td[^>]*>(.*?)<\/td>/i', // <td> and </td> |
| | |
| | | ' ', // Runs of spaces, pre-handling |
| | | '', // <script>s -- which strip_tags supposedly has problems with |
| | | '', // <style>s -- which strip_tags supposedly has problems with |
| | | //'', // Comments -- which strip_tags might have problem a with |
| | | "\n\n", // <P> |
| | | "\n\n", // <P> |
| | | "\n", // <br> |
| | | '_\\1_', // <i> |
| | | '_\\1_', // <em> |
| | |
| | | "\n\n", // <ol> and </ol> |
| | | "\t* \\1\n", // <li> and </li> |
| | | "\n\t* ", // <li> |
| | | "\n-------------------------\n", // <hr> |
| | | "\n\n", // <table> and </table> |
| | | "\n-------------------------\n", // <hr> |
| | | "<div>\n", // <div> |
| | | "\n\n", // <table> and </table> |
| | | "\n", // <tr> and </tr> |
| | | "\t\t\\1\n", // <td> and </td> |
| | | ' ', // Non-breaking space |
| | |
| | | * @see $pre_replace |
| | | */ |
| | | var $pre_search = array( |
| | | "/\n/", |
| | | "/\t/", |
| | | '/ /', |
| | | '/<pre[^>]*>/', |
| | | '/<\/pre>/' |
| | | "/\n/", |
| | | "/\t/", |
| | | '/ /', |
| | | '/<pre[^>]*>/', |
| | | '/<\/pre>/' |
| | | ); |
| | | |
| | | /** |
| | |
| | | * @see $pre_search |
| | | */ |
| | | var $pre_replace = array( |
| | | '<br>', |
| | | ' ', |
| | | ' ', |
| | | '', |
| | | '' |
| | | '<br>', |
| | | ' ', |
| | | ' ', |
| | | '', |
| | | '' |
| | | ); |
| | | |
| | | /** |
| | |
| | | if ( !empty($source) ) { |
| | | $this->set_html($source, $from_file); |
| | | } |
| | | |
| | | |
| | | $this->set_base_url(); |
| | | $this->_do_links = $do_links; |
| | | $this->width = $width; |
| | | $this->_do_links = $do_links; |
| | | $this->width = $width; |
| | | } |
| | | |
| | | /** |
| | |
| | | function set_html( $source, $from_file = false ) |
| | | { |
| | | if ( $from_file && file_exists($source) ) { |
| | | $this->html = file_get_contents($source); |
| | | $this->html = file_get_contents($source); |
| | | } |
| | | else |
| | | $this->html = $source; |
| | | $this->html = $source; |
| | | |
| | | $this->_converted = false; |
| | | } |
| | |
| | | |
| | | $text = trim(stripslashes($this->html)); |
| | | |
| | | // Convert <PRE> |
| | | // Convert <PRE> |
| | | $this->_convert_pre($text); |
| | | |
| | | // Run our defined search-and-replace |
| | | $text = preg_replace($this->search, $this->replace, $text); |
| | | |
| | | // Replace known html entities |
| | | $text = html_entity_decode($text, ENT_COMPAT, 'UTF-8'); |
| | | |
| | | // Run our defined search-and-replace with callback |
| | | $text = preg_replace_callback($this->callback_search, array('html2text', '_preg_callback'), $text); |
| | | |
| | | // Replace known html entities |
| | | $text = html_entity_decode($text, ENT_COMPAT, 'UTF-8'); |
| | | |
| | | // Remove unknown/unhandled entities (this cannot be done in search-and-replace block) |
| | | $text = preg_replace('/&[^&;]+;/i', '', $text); |
| | | $text = preg_replace('/&#?[a-z0-9]{2,7};/i', '', $text); |
| | | |
| | | // Strip any other HTML tags |
| | | $text = strip_tags($text, $this->allowed_tags); |
| | |
| | | $this->_link_count++; |
| | | $this->_link_list .= "[" . $this->_link_count . "] $link\n"; |
| | | $additional = ' [' . $this->_link_count . ']'; |
| | | } elseif ( substr($link, 0, 11) == 'javascript:' ) { |
| | | // Don't count the link; ignore it |
| | | $additional = ''; |
| | | } elseif ( substr($link, 0, 11) == 'javascript:' ) { |
| | | // Don't count the link; ignore it |
| | | $additional = ''; |
| | | // what about href="#anchor" ? |
| | | } else { |
| | | $this->_link_count++; |
| | |
| | | */ |
| | | function _convert_pre(&$text) |
| | | { |
| | | while(preg_match('/<pre[^>]*>(.*)<\/pre>/ismU', $text, $matches)) |
| | | { |
| | | $result = preg_replace($this->pre_search, $this->pre_replace, $matches[1]); |
| | | $text = preg_replace('/<pre[^>]*>.*<\/pre>/ismU', '<div><br>' . $result . '<br></div>', $text, 1); |
| | | } |
| | | while(preg_match('/<pre[^>]*>(.*)<\/pre>/ismU', $text, $matches)) { |
| | | $result = preg_replace($this->pre_search, $this->pre_replace, $matches[1]); |
| | | $text = preg_replace('/<pre[^>]*>.*<\/pre>/ismU', '<div><br>' . $result . '<br></div>', $text, 1); |
| | | } |
| | | } |
| | | |
| | | /** |
| | |
| | | */ |
| | | function _preg_callback($matches) |
| | | { |
| | | switch($matches[1]) |
| | | { |
| | | case 'b': |
| | | case 'strong': |
| | | return $this->_strtoupper($matches[2]); |
| | | case 'hr': |
| | | return $this->_strtoupper("\t\t". $matches[2] ."\n"); |
| | | case 'h': |
| | | return $this->_strtoupper("\n\n". $matches[2] ."\n\n"); |
| | | case 'a': |
| | | return $this->_build_link_list($matches[3], $matches[4]); |
| | | } |
| | | switch($matches[1]) { |
| | | case 'b': |
| | | case 'strong': |
| | | return $this->_strtoupper($matches[2]); |
| | | case 'th': |
| | | return $this->_strtoupper("\t\t". $matches[2] ."\n"); |
| | | case 'h': |
| | | return $this->_strtoupper("\n\n". $matches[2] ."\n\n"); |
| | | case 'a': |
| | | return $this->_build_link_list($matches[3], $matches[4]); |
| | | } |
| | | } |
| | | |
| | | /** |
| | |
| | | */ |
| | | function _strtoupper($str) |
| | | { |
| | | if (function_exists('mb_strtoupper')) |
| | | return mb_strtoupper($str); |
| | | else |
| | | return strtoupper($str); |
| | | if (function_exists('mb_strtoupper')) |
| | | return mb_strtoupper($str); |
| | | else |
| | | return strtoupper($str); |
| | | } |
| | | } |
| | | |