alecpl
2012-02-08 f3599505f1f1f7d231ad10cd771ed271f4fbdafa
- Improved r5861 change: Content converted to upper case can contain HTML tags, handle them properly


1 files modified
33 ■■■■ changed files
program/lib/html2text.php 33 ●●●● patch | view | raw | blame | history
program/lib/html2text.php
@@ -249,11 +249,11 @@
     *  @access public
     */
    var $callback_search = array(
        '/<(a) [^>]*href=("|\')([^"\']+)\2[^>]*>(.*?)<\/a>/i',
                                                   // <a href="">
        '/<(h)[123456][^>]*>(.*?)<\/h[123456]>/i', // H1 - H3
        '/<(b)[^>]*>(.*?)<\/b>/i',                 // <b>
        '/<(strong)[^>]*>(.*?)<\/strong>/i',       // <strong>
        '/<(a) [^>]*href=("|\')([^"\']+)\2[^>]*>(.*?)<\/a>/i',
                                                   // <a href="">
        '/<(th)[^>]*>(.*?)<\/th>/i',               // <th> and </th>
    );
@@ -675,11 +675,11 @@
        switch($matches[1]) {
        case 'b':
        case 'strong':
            return $this->_strtoupper($matches[2]);
            return $this->_toupper($matches[2]);
        case 'th':
            return $this->_strtoupper("\t\t". $matches[2] ."\n");
            return $this->_toupper("\t\t". $matches[2] ."\n");
        case 'h':
            return $this->_strtoupper("\n\n". $matches[2] ."\n\n");
            return $this->_toupper("\n\n". $matches[2] ."\n\n");
        case 'a':
            // Remove spaces in URL (#1487805)
            $url = str_replace(' ', '', $matches[3]);
@@ -699,7 +699,28 @@
    }
    /**
     *  Strtoupper multibyte wrapper function with HTML entities handling
     * Strtoupper function with HTML tags and entities handling.
     *
     * @param string $str Text to convert
     * @return string Converted text
     */
    private function _toupper($str)
    {
        // string can containg HTML tags
        $chunks = preg_split('/(<[^>]*>)/', $str, null, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE);
        // convert toupper only the text between HTML tags
        foreach ($chunks as $idx => $chunk) {
            if ($chunk[0] != '<') {
                $chunks[$idx] = $this->_strtoupper($chunk);
            }
        }
        return implode($chunks);
    }
    /**
     * Strtoupper multibyte wrapper function with HTML entities handling.
     *
     *  @param string $str Text to convert
     *  @return string Converted text