WordPress.org

Make WordPress Core

Changeset 11938


Ignore:
Timestamp:
09/15/09 16:33:59 (5 years ago)
Author:
ryan
Message:

Update SimplePie to 1.2. fixes #10392

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/wp-includes/class-simplepie.php

    r11657 r11938  
    66 * Takes the hard work out of managing a complete RSS/Atom solution. 
    77 * 
    8  * Copyright (c) 2004-2008, Ryan Parman and Geoffrey Sneddon 
     8 * Copyright (c) 2004-2009, Ryan Parman and Geoffrey Sneddon 
    99 * All rights reserved. 
    1010 * 
     
    3434 * 
    3535 * @package SimplePie 
    36  * @version 1.1.3 
    37  * @copyright 2004-2008 Ryan Parman, Geoffrey Sneddon 
     36 * @version 1.2 
     37 * @copyright 2004-2009 Ryan Parman, Geoffrey Sneddon 
    3838 * @author Ryan Parman 
    3939 * @author Geoffrey Sneddon 
     
    5252 * SimplePie Version 
    5353 */ 
    54 define('SIMPLEPIE_VERSION', '1.1.3'); 
     54define('SIMPLEPIE_VERSION', '1.2'); 
    5555 
    5656/** 
    5757 * SimplePie Build 
    5858 */ 
    59 define('SIMPLEPIE_BUILD', 20081219); 
     59define('SIMPLEPIE_BUILD', '20090627192103'); 
    6060 
    6161/** 
     
    243243 
    244244/** 
     245 * Don't change case 
     246 */ 
     247define('SIMPLEPIE_SAME_CASE', 1); 
     248 
     249/** 
     250 * Change to lowercase 
     251 */ 
     252define('SIMPLEPIE_LOWERCASE', 2); 
     253 
     254/** 
     255 * Change to uppercase 
     256 */ 
     257define('SIMPLEPIE_UPPERCASE', 4); 
     258 
     259/** 
    245260 * PCRE for HTML attributes 
    246261 */ 
     
    377392 * 
    378393 * @package SimplePie 
    379  * @version "Razzleberry" 
    380  * @copyright 2004-2007 Ryan Parman, Geoffrey Sneddon 
    381  * @author Ryan Parman 
    382  * @author Geoffrey Sneddon 
    383  * @todo Option for type of fetching (cache, not modified header, fetch, etc.) 
    384394 */ 
    385395class SimplePie 
     
    638648     */ 
    639649    var $max_checked_feeds = 10; 
     650 
     651    /** 
     652     * @var array All the feeds found during the autodiscovery process 
     653     * @see SimplePie::get_all_discovered_feeds() 
     654     * @access private 
     655     */ 
     656    var $all_discovered_feeds = array(); 
    640657 
    641658    /** 
     
    14411458    function set_favicon_handler($page = false, $qs = 'i') 
    14421459    { 
    1443         if ($page != false) 
     1460        if ($page !== false) 
    14441461        { 
    14451462            $this->favicon_handler = $page . '?' . $qs . '='; 
     
    14601477    function set_image_handler($page = false, $qs = 'i') 
    14611478    { 
    1462         if ($page != false) 
     1479        if ($page !== false) 
    14631480        { 
    14641481            $this->sanitize->set_image_handler($page . '?' . $qs . '='); 
     
    14831500    function init() 
    14841501    { 
     1502        // Check absolute bare minimum requirements. 
    14851503        if ((function_exists('version_compare') && version_compare(PHP_VERSION, '4.3.0', '<')) || !extension_loaded('xml') || !extension_loaded('pcre')) 
    14861504        { 
    14871505            return false; 
    14881506        } 
     1507        // Then check the xml extension is sane (i.e., libxml 2.7.x issue on PHP < 5.2.9 and libxml 2.7.0 to 2.7.2 on any version) if we don't have xmlreader. 
     1508        elseif (!extension_loaded('xmlreader')) 
     1509        { 
     1510            static $xml_is_sane = null; 
     1511            if ($xml_is_sane === null) 
     1512            { 
     1513                $parser_check = xml_parser_create(); 
     1514                xml_parse_into_struct($parser_check, '<foo>&amp;</foo>', $values); 
     1515                xml_parser_free($parser_check); 
     1516                $xml_is_sane = isset($values[0]['value']); 
     1517            } 
     1518            if (!$xml_is_sane) 
     1519            { 
     1520                return false; 
     1521            } 
     1522        } 
     1523 
    14891524        if (isset($_GET[$this->javascript])) 
    14901525        { 
    1491             if (function_exists('ob_gzhandler')) 
    1492             { 
    1493                 ob_start('ob_gzhandler'); 
    1494             } 
    1495             header('Content-type: text/javascript; charset: UTF-8'); 
    1496             header('Cache-Control: must-revalidate'); 
    1497             header('Expires: ' . gmdate('D, d M Y H:i:s', time() + 604800) . ' GMT'); // 7 days 
    1498             ?> 
    1499 function embed_odeo(link) { 
    1500     document.writeln('<embed src="http://odeo.com/flash/audio_player_fullsize.swf" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" quality="high" width="440" height="80" wmode="transparent" allowScriptAccess="any" flashvars="valid_sample_rate=true&external_url='+link+'"></embed>'); 
    1501 } 
    1502  
    1503 function embed_quicktime(type, bgcolor, width, height, link, placeholder, loop) { 
    1504     if (placeholder != '') { 
    1505         document.writeln('<embed type="'+type+'" style="cursor:hand; cursor:pointer;" href="'+link+'" src="'+placeholder+'" width="'+width+'" height="'+height+'" autoplay="false" target="myself" controller="false" loop="'+loop+'" scale="aspect" bgcolor="'+bgcolor+'" pluginspage="http://www.apple.com/quicktime/download/"></embed>'); 
    1506     } 
    1507     else { 
    1508         document.writeln('<embed type="'+type+'" style="cursor:hand; cursor:pointer;" src="'+link+'" width="'+width+'" height="'+height+'" autoplay="false" target="myself" controller="true" loop="'+loop+'" scale="aspect" bgcolor="'+bgcolor+'" pluginspage="http://www.apple.com/quicktime/download/"></embed>'); 
    1509     } 
    1510 } 
    1511  
    1512 function embed_flash(bgcolor, width, height, link, loop, type) { 
    1513     document.writeln('<embed src="'+link+'" pluginspage="http://www.macromedia.com/go/getflashplayer" type="'+type+'" quality="high" width="'+width+'" height="'+height+'" bgcolor="'+bgcolor+'" loop="'+loop+'"></embed>'); 
    1514 } 
    1515  
    1516 function embed_flv(width, height, link, placeholder, loop, player) { 
    1517     document.writeln('<embed src="'+player+'" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" quality="high" width="'+width+'" height="'+height+'" wmode="transparent" flashvars="file='+link+'&autostart=false&repeat='+loop+'&showdigits=true&showfsbutton=false"></embed>'); 
    1518 } 
    1519  
    1520 function embed_wmedia(width, height, link) { 
    1521     document.writeln('<embed type="application/x-mplayer2" src="'+link+'" autosize="1" width="'+width+'" height="'+height+'" showcontrols="1" showstatusbar="0" showdisplay="0" autostart="0"></embed>'); 
    1522 } 
    1523             <?php 
     1526            SimplePie_Misc::output_javascript(); 
    15241527            exit; 
    15251528        } 
     
    15511554                    { 
    15521555                        // If the cache is for an outdated build of SimplePie 
    1553                         if (!isset($this->data['build']) || $this->data['build'] != SIMPLEPIE_BUILD) 
     1556                        if (!isset($this->data['build']) || $this->data['build'] !== SIMPLEPIE_BUILD) 
    15541557                        { 
    15551558                            $cache->unlink(); 
     
    15571560                        } 
    15581561                        // If we've hit a collision just rerun it with caching disabled 
    1559                         elseif (isset($this->data['url']) && $this->data['url'] != $this->feed_url) 
     1562                        elseif (isset($this->data['url']) && $this->data['url'] !== $this->feed_url) 
    15601563                        { 
    15611564                            $cache = false; 
     
    15691572                            { 
    15701573                                // Do not need to do feed autodiscovery yet. 
    1571                                 if ($this->data['feed_url'] == $this->data['url']) 
     1574                                if ($this->data['feed_url'] === $this->data['url']) 
    15721575                                { 
    15731576                                    $cache->unlink(); 
     
    15991602                                if ($file->success) 
    16001603                                { 
    1601                                     if ($file->status_code == 304) 
     1604                                    if ($file->status_code === 304) 
    16021605                                    { 
    16031606                                        $cache->touch(); 
     
    16311634                if (!isset($file)) 
    16321635                { 
    1633                     if (is_a($this->file, 'SimplePie_File') && $this->file->url == $this->feed_url) 
     1636                    if (is_a($this->file, 'SimplePie_File') && $this->file->url === $this->feed_url) 
    16341637                    { 
    16351638                        $file =& $this->file; 
     
    16411644                } 
    16421645                // If the file connection has an error, set SimplePie::error to that and quit 
    1643                 if (!$file->success) 
     1646                if (!$file->success && !($file->method & SIMPLEPIE_FILE_SOURCE_REMOTE === 0 || ($file->status_code === 200 || $file->status_code > 206 && $file->status_code < 300))) 
    16441647                { 
    16451648                    $this->error = $file->error; 
     
    16621665                        // We need to unset this so that if SimplePie::set_file() has been called that object is untouched 
    16631666                        unset($file); 
    1664                         if ($file = $locate->find($this->autodiscovery)) 
     1667                        if ($file = $locate->find($this->autodiscovery, $this->all_discovered_feeds)) 
    16651668                        { 
    16661669                            if ($cache) 
     
    16691672                                if (!$cache->save($this)) 
    16701673                                { 
    1671                                     trigger_error("$cache->name is not writeable", E_USER_WARNING); 
     1674                                    trigger_error("$this->cache_location is not writeable", E_USER_WARNING); 
    16721675                                } 
    16731676                                $cache = call_user_func(array($this->cache_class, 'create'), $this->cache_location, call_user_func($this->cache_name_function, $file->url), 'spc'); 
     
    17871790                } 
    17881791            } 
    1789             // We have an error, just set SimplePie::error to it and quit 
    1790             $this->error = sprintf('XML error: %s at line %d, column %d', $parser->get_error_string(), $parser->get_current_line(), $parser->get_current_column()); 
     1792            if(isset($parser)) 
     1793            { 
     1794                // We have an error, just set SimplePie_Misc::error to it and quit 
     1795                $this->error = sprintf('XML error: %s at line %d, column %d', $parser->get_error_string(), $parser->get_current_line(), $parser->get_current_column()); 
     1796            } 
     1797            else 
     1798            { 
     1799                $this->error = 'The data could not be converted to UTF-8'; 
     1800            } 
    17911801            SimplePie_Misc::error($this->error, E_USER_NOTICE, __FILE__, __LINE__); 
    17921802            return false; 
     
    18831893                } 
    18841894            } 
    1885             elseif (isset($this->data['child']['']['rss'])) 
     1895            elseif (isset($this->data['child'][SIMPLEPIE_NAMESPACE_RSS_20]['rss'])) 
    18861896            { 
    18871897                $this->data['type'] &= SIMPLEPIE_TYPE_RSS_ALL; 
    1888                 if (isset($this->data['child']['']['rss'][0]['attribs']['']['version'])) 
    1889                 { 
    1890                     switch (trim($this->data['child']['']['rss'][0]['attribs']['']['version'])) 
     1898                if (isset($this->data['child'][SIMPLEPIE_NAMESPACE_RSS_20]['rss'][0]['attribs']['']['version'])) 
     1899                { 
     1900                    switch (trim($this->data['child'][SIMPLEPIE_NAMESPACE_RSS_20]['rss'][0]['attribs']['']['version'])) 
    18911901                    { 
    18921902                        case '0.91': 
    18931903                            $this->data['type'] &= SIMPLEPIE_TYPE_RSS_091; 
    1894                             if (isset($this->data['child']['']['rss'][0]['child']['']['skiphours']['hour'][0]['data'])) 
     1904                            if (isset($this->data['child'][SIMPLEPIE_NAMESPACE_RSS_20]['rss'][0]['child'][SIMPLEPIE_NAMESPACE_RSS_20]['skiphours']['hour'][0]['data'])) 
    18951905                            { 
    1896                                 switch (trim($this->data['child']['']['rss'][0]['child']['']['skiphours']['hour'][0]['data'])) 
     1906                                switch (trim($this->data['child'][SIMPLEPIE_NAMESPACE_RSS_20]['rss'][0]['child'][SIMPLEPIE_NAMESPACE_RSS_20]['skiphours']['hour'][0]['data'])) 
    18971907                                { 
    18981908                                    case '0': 
     
    19631973                    $file =& new $this->file_class($favicon, $this->timeout / 10, 5, array('X-FORWARDED-FOR' => $_SERVER['REMOTE_ADDR']), $this->useragent, $this->force_fsockopen); 
    19641974 
    1965                     if ($file->success && ($file->status_code == 200 || ($file->status_code > 206 && $file->status_code < 300)) && strlen($file->body) > 0) 
     1975                    if ($file->success && ($file->method & SIMPLEPIE_FILE_SOURCE_REMOTE === 0 || ($file->status_code === 200 || $file->status_code > 206 && $file->status_code < 300)) && strlen($file->body) > 0) 
    19661976                    { 
    19671977                        $sniffer =& new $this->content_type_sniffer_class($file); 
     
    19781988                            } 
    19791989                        } 
     1990                        // not an image 
     1991                        else 
     1992                        { 
     1993                            return false; 
     1994                        } 
    19801995                    } 
    19811996                } 
     
    20222037        if ($this->feed_url !== null) 
    20232038        { 
    2024             return 'outlook' . $this->sanitize(SimplePie_Misc::fix_protocol($this->feed_url, 2), SIMPLEPIE_CONSTRUCT_IRI); 
     2039            return $this->sanitize('outlook' . SimplePie_Misc::fix_protocol($this->feed_url, 2), SIMPLEPIE_CONSTRUCT_IRI); 
    20252040        } 
    20262041        else 
     
    20672082        if ($this->subscribe_url()) 
    20682083        { 
    2069             $return = $this->sanitize($feed_url, SIMPLEPIE_CONSTRUCT_IRI) . rawurlencode($this->feed_url); 
     2084            $return = $feed_url . rawurlencode($this->feed_url); 
    20702085            if ($site_url !== null && $this->get_link() !== null) 
    20712086            { 
    2072                 $return .= $this->sanitize($site_url, SIMPLEPIE_CONSTRUCT_IRI) . rawurlencode($this->get_link()); 
    2073             } 
    2074             return $return; 
     2087                $return .= $site_url . rawurlencode($this->get_link()); 
     2088            } 
     2089            return $this->sanitize($return, SIMPLEPIE_CONSTRUCT_IRI); 
    20752090        } 
    20762091        else 
     
    20872102    function subscribe_bloglines() 
    20882103    { 
    2089         return urldecode($this->subscribe_service('http://www.bloglines.com/sub/')); 
     2104        return $this->subscribe_service('http://www.bloglines.com/sub/'); 
    20902105    } 
    20912106 
     
    21812196        if ($type & SIMPLEPIE_TYPE_RSS_SYNDICATION) 
    21822197        { 
    2183             if (isset($this->data['child']['']['rss'][0]['child'][$namespace][$tag])) 
    2184             { 
    2185                 return $this->data['child']['']['rss'][0]['child'][$namespace][$tag]; 
     2198            if (isset($this->data['child'][SIMPLEPIE_NAMESPACE_RSS_20]['rss'][0]['child'][$namespace][$tag])) 
     2199            { 
     2200                return $this->data['child'][SIMPLEPIE_NAMESPACE_RSS_20]['rss'][0]['child'][$namespace][$tag]; 
    21862201            } 
    21872202        } 
     
    22212236        if ($type & SIMPLEPIE_TYPE_RSS_SYNDICATION) 
    22222237        { 
    2223             if ($channel = $this->get_feed_tags('', 'channel')) 
     2238            if ($channel = $this->get_feed_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'channel')) 
    22242239            { 
    22252240                if (isset($channel[0]['child'][$namespace][$tag])) 
     
    22572272        if ($type & SIMPLEPIE_TYPE_RSS_SYNDICATION) 
    22582273        { 
    2259             if ($image = $this->get_channel_tags('', 'image')) 
     2274            if ($image = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'image')) 
    22602275            { 
    22612276                if (isset($image[0]['child'][$namespace][$tag])) 
     
    23072322            return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0])); 
    23082323        } 
    2309         elseif ($return = $this->get_channel_tags('', 'title')) 
     2324        elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'title')) 
    23102325        { 
    23112326            return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0])); 
     
    23612376            $categories[] =& new $this->category_class($term, $scheme, $label); 
    23622377        } 
    2363         foreach ((array) $this->get_channel_tags('', 'category') as $category) 
    2364         { 
    2365             $categories[] =& new $this->category_class($this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null); 
     2378        foreach ((array) $this->get_channel_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'category') as $category) 
     2379        { 
     2380            // This is really the label, but keep this as the term also for BC. 
     2381            // Label will also work on retrieving because that falls back to term. 
     2382            $term = $this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT); 
     2383            if (isset($category['attribs']['']['domain'])) 
     2384            { 
     2385                $scheme = $this->sanitize($category['attribs']['']['domain'], SIMPLEPIE_CONSTRUCT_TEXT); 
     2386            } 
     2387            else 
     2388            { 
     2389                $scheme = null; 
     2390            } 
     2391            $categories[] =& new $this->category_class($term, $scheme, null); 
    23662392        } 
    23672393        foreach ((array) $this->get_channel_tags(SIMPLEPIE_NAMESPACE_DC_11, 'subject') as $category) 
     
    25952621                $this->data['links']['alternate'][] = $this->sanitize($links[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($links[0])); 
    25962622            } 
    2597             if ($links = $this->get_channel_tags('', 'link')) 
     2623            if ($links = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'link')) 
    25982624            { 
    25992625                $this->data['links']['alternate'][] = $this->sanitize($links[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($links[0])); 
     
    26152641                    } 
    26162642                } 
    2617                 elseif (substr($key, 0, 41) == SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY) 
     2643                elseif (substr($key, 0, 41) === SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY) 
    26182644                { 
    26192645                    $this->data['links'][substr($key, 41)] =& $this->data['links'][$key]; 
     
    26332659    } 
    26342660 
     2661    function get_all_discovered_feeds() 
     2662    { 
     2663        return $this->all_discovered_feeds; 
     2664    } 
     2665 
    26352666    function get_description() 
    26362667    { 
     
    26512682            return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0])); 
    26522683        } 
    2653         elseif ($return = $this->get_channel_tags('', 'description')) 
    2654         { 
    2655             return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0])); 
     2684        elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'description')) 
     2685        { 
     2686            return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_HTML, $this->get_base($return[0])); 
    26562687        } 
    26572688        elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_DC_11, 'description')) 
     
    26872718            return $this->sanitize($return[0]['data'], SimplePie_Misc::atom_03_construct_type($return[0]['attribs']), $this->get_base($return[0])); 
    26882719        } 
    2689         elseif ($return = $this->get_channel_tags('', 'copyright')) 
     2720        elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'copyright')) 
    26902721        { 
    26912722            return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); 
     
    27072738    function get_language() 
    27082739    { 
    2709         if ($return = $this->get_channel_tags('', 'language')) 
     2740        if ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'language')) 
    27102741        { 
    27112742            return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); 
     
    27872818            return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); 
    27882819        } 
    2789         elseif ($return = $this->get_image_tags('', 'title')) 
     2820        elseif ($return = $this->get_image_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'title')) 
    27902821        { 
    27912822            return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); 
     
    28272858            return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($return[0])); 
    28282859        } 
    2829         elseif ($return = $this->get_image_tags('', 'url')) 
     2860        elseif ($return = $this->get_image_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'url')) 
    28302861        { 
    28312862            return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($return[0])); 
     
    28472878            return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($return[0])); 
    28482879        } 
    2849         elseif ($return = $this->get_image_tags('', 'link')) 
     2880        elseif ($return = $this->get_image_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'link')) 
    28502881        { 
    28512882            return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($return[0])); 
     
    28592890    function get_image_width() 
    28602891    { 
    2861         if ($return = $this->get_image_tags('', 'width')) 
     2892        if ($return = $this->get_image_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'width')) 
    28622893        { 
    28632894            return round($return[0]['data']); 
    28642895        } 
    2865         elseif ($this->get_type() & SIMPLEPIE_TYPE_RSS_SYNDICATION && $this->get_image_tags('', 'url')) 
     2896        elseif ($this->get_type() & SIMPLEPIE_TYPE_RSS_SYNDICATION && $this->get_image_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'url')) 
    28662897        { 
    28672898            return 88.0; 
     
    28752906    function get_image_height() 
    28762907    { 
    2877         if ($return = $this->get_image_tags('', 'height')) 
     2908        if ($return = $this->get_image_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'height')) 
    28782909        { 
    28792910            return round($return[0]['data']); 
    28802911        } 
    2881         elseif ($this->get_type() & SIMPLEPIE_TYPE_RSS_SYNDICATION && $this->get_image_tags('', 'url')) 
     2912        elseif ($this->get_type() & SIMPLEPIE_TYPE_RSS_SYNDICATION && $this->get_image_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'url')) 
    28822913        { 
    28832914            return 31.0; 
     
    28912922    function get_item_quantity($max = 0) 
    28922923    { 
     2924        $max = (int) $max; 
    28932925        $qty = count($this->get_items()); 
    2894         if ($max == 0) 
     2926        if ($max === 0) 
    28952927        { 
    28962928            return $qty; 
     
    29172949    function get_items($start = 0, $end = 0) 
    29182950    { 
    2919         if (!empty($this->multifeed_objects)) 
    2920         { 
    2921             return SimplePie::merge_items($this->multifeed_objects, $start, $end, $this->item_limit); 
    2922         } 
    2923         elseif (!isset($this->data['items'])) 
    2924         { 
    2925             if ($items = $this->get_feed_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'entry')) 
    2926             { 
    2927                 $keys = array_keys($items); 
    2928                 foreach ($keys as $key) 
    2929                 { 
    2930                     $this->data['items'][] =& new $this->item_class($this, $items[$key]); 
    2931                 } 
    2932             } 
    2933             if ($items = $this->get_feed_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'entry')) 
    2934             { 
    2935                 $keys = array_keys($items); 
    2936                 foreach ($keys as $key) 
    2937                 { 
    2938                     $this->data['items'][] =& new $this->item_class($this, $items[$key]); 
    2939                 } 
    2940             } 
    2941             if ($items = $this->get_feed_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'item')) 
    2942             { 
    2943                 $keys = array_keys($items); 
    2944                 foreach ($keys as $key) 
    2945                 { 
    2946                     $this->data['items'][] =& new $this->item_class($this, $items[$key]); 
    2947                 } 
    2948             } 
    2949             if ($items = $this->get_feed_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'item')) 
    2950             { 
    2951                 $keys = array_keys($items); 
    2952                 foreach ($keys as $key) 
    2953                 { 
    2954                     $this->data['items'][] =& new $this->item_class($this, $items[$key]); 
    2955                 } 
    2956             } 
    2957             if ($items = $this->get_channel_tags('', 'item')) 
    2958             { 
    2959                 $keys = array_keys($items); 
    2960                 foreach ($keys as $key) 
    2961                 { 
    2962                     $this->data['items'][] =& new $this->item_class($this, $items[$key]); 
     2951        if (!isset($this->data['items'])) 
     2952        { 
     2953            if (!empty($this->multifeed_objects)) 
     2954            { 
     2955                $this->data['items'] = SimplePie::merge_items($this->multifeed_objects, $start, $end, $this->item_limit); 
     2956            } 
     2957            else 
     2958            { 
     2959                $this->data['items'] = array(); 
     2960                if ($items = $this->get_feed_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'entry')) 
     2961                { 
     2962                    $keys = array_keys($items); 
     2963                    foreach ($keys as $key) 
     2964                    { 
     2965                        $this->data['items'][] =& new $this->item_class($this, $items[$key]); 
     2966                    } 
     2967                } 
     2968                if ($items = $this->get_feed_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'entry')) 
     2969                { 
     2970                    $keys = array_keys($items); 
     2971                    foreach ($keys as $key) 
     2972                    { 
     2973                        $this->data['items'][] =& new $this->item_class($this, $items[$key]); 
     2974                    } 
     2975                } 
     2976                if ($items = $this->get_feed_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'item')) 
     2977                { 
     2978                    $keys = array_keys($items); 
     2979                    foreach ($keys as $key) 
     2980                    { 
     2981                        $this->data['items'][] =& new $this->item_class($this, $items[$key]); 
     2982                    } 
     2983                } 
     2984                if ($items = $this->get_feed_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'item')) 
     2985                { 
     2986                    $keys = array_keys($items); 
     2987                    foreach ($keys as $key) 
     2988                    { 
     2989                        $this->data['items'][] =& new $this->item_class($this, $items[$key]); 
     2990                    } 
     2991                } 
     2992                if ($items = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'item')) 
     2993                { 
     2994                    $keys = array_keys($items); 
     2995                    foreach ($keys as $key) 
     2996                    { 
     2997                        $this->data['items'][] =& new $this->item_class($this, $items[$key]); 
     2998                    } 
    29632999                } 
    29643000            } 
     
    29683004        { 
    29693005            // If we want to order it by date, check if all items have a date, and then sort it 
    2970             if ($this->order_by_date) 
     3006            if ($this->order_by_date && empty($this->multifeed_objects)) 
    29713007            { 
    29723008                if (!isset($this->data['ordered_items'])) 
     
    29963032 
    29973033            // Slice the data as desired 
    2998             if ($end == 0) 
     3034            if ($end === 0) 
    29993035            { 
    30003036                return array_slice($items, $start); 
     
    30113047    } 
    30123048 
     3049    /** 
     3050     * @static 
     3051     */ 
    30133052    function sort_items($a, $b) 
    30143053    { 
     
    30163055    } 
    30173056 
     3057    /** 
     3058     * @static 
     3059     */ 
    30183060    function merge_items($urls, $start = 0, $end = 0, $limit = 0) 
    30193061    { 
     
    30483090            } 
    30493091 
    3050             if ($end == 0) 
     3092            if ($end === 0) 
    30513093            { 
    30523094                return array_slice($items, $start); 
     
    31313173                return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); 
    31323174            } 
    3133             elseif ($return = $this->get_item_tags('', 'guid')) 
     3175            elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'guid')) 
    31343176            { 
    31353177                return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); 
     
    31823224                $this->data['title'] = $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0])); 
    31833225            } 
    3184             elseif ($return = $this->get_item_tags('', 'title')) 
     3226            elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'title')) 
    31853227            { 
    31863228                $this->data['title'] = $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0])); 
     
    32163258            return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0])); 
    32173259        } 
    3218         elseif ($return = $this->get_item_tags('', 'description')) 
     3260        elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'description')) 
    32193261        { 
    32203262            return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_HTML, $this->get_base($return[0])); 
     
    33063348            $categories[] =& new $this->feed->category_class($term, $scheme, $label); 
    33073349        } 
    3308         foreach ((array) $this->get_item_tags('', 'category') as $category) 
    3309         { 
    3310             $categories[] =& new $this->feed->category_class($this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null); 
     3350        foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'category') as $category) 
     3351        { 
     3352            // This is really the label, but keep this as the term also for BC. 
     3353            // Label will also work on retrieving because that falls back to term. 
     3354            $term = $this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT); 
     3355            if (isset($category['attribs']['']['domain'])) 
     3356            { 
     3357                $scheme = $this->sanitize($category['attribs']['']['domain'], SIMPLEPIE_CONSTRUCT_TEXT); 
     3358            } 
     3359            else 
     3360            { 
     3361                $scheme = null; 
     3362            } 
     3363            $categories[] =& new $this->feed->category_class($term, $scheme, null); 
    33113364        } 
    33123365        foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_11, 'subject') as $category) 
     
    34133466    } 
    34143467 
    3415     /** 
    3416      * @todo Atom inheritance (item author, source author, feed author) 
    3417      */ 
    34183468    function get_authors() 
    34193469    { 
     
    34633513            } 
    34643514        } 
    3465         if ($author = $this->get_item_tags('', 'author')) 
     3515        if ($author = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'author')) 
    34663516        { 
    34673517            $authors[] =& new $this->feed->author_class(null, null, $this->sanitize($author[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT)); 
     
    35423592                $this->data['date']['raw'] = $return[0]['data']; 
    35433593            } 
    3544             elseif ($return = $this->get_item_tags('', 'pubDate')) 
     3594            elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'pubDate')) 
    35453595            { 
    35463596                $this->data['date']['raw'] = $return[0]['data']; 
     
    36633713                $this->data['links']['alternate'][] = $this->sanitize($links[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($links[0])); 
    36643714            } 
    3665             if ($links = $this->get_item_tags('', 'link')) 
     3715            if ($links = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'link')) 
    36663716            { 
    36673717                $this->data['links']['alternate'][] = $this->sanitize($links[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($links[0])); 
    36683718            } 
    3669             if ($links = $this->get_item_tags('', 'guid')) 
    3670             { 
    3671                 if (!isset($links[0]['attribs']['']['isPermaLink']) || strtolower(trim($links[0]['attribs']['']['isPermaLink'])) == 'true') 
     3719            if ($links = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'guid')) 
     3720            { 
     3721                if (!isset($links[0]['attribs']['']['isPermaLink']) || strtolower(trim($links[0]['attribs']['']['isPermaLink'])) === 'true') 
    36723722                { 
    36733723                    $this->data['links']['alternate'][] = $this->sanitize($links[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($links[0])); 
     
    36903740                    } 
    36913741                } 
    3692                 elseif (substr($key, 0, 41) == SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY) 
     3742                elseif (substr($key, 0, 41) === SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY) 
    36933743                { 
    36943744                    $this->data['links'][substr($key, 41)] =& $this->data['links'][$key]; 
     
    42564306                    $restriction_type = null; 
    42574307                    $restriction_value = 'itunes'; 
    4258                     if (isset($restriction['data']) && strtolower($restriction['data']) == 'yes') 
     4308                    if (isset($restriction['data']) && strtolower($restriction['data']) === 'yes') 
    42594309                    { 
    42604310                        $restriction_relationship = 'deny'; 
     
    42924342                    $restriction_type = null; 
    42934343                    $restriction_value = 'itunes'; 
    4294                     if (isset($restriction['data']) && strtolower($restriction['data']) == 'yes') 
     4344                    if (isset($restriction['data']) && strtolower($restriction['data']) === 'yes') 
    42954345                    { 
    42964346                        $restriction_relationship = 'deny'; 
     
    54035453            foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'link') as $link) 
    54045454            { 
    5405                 if (isset($link['attribs']['']['href']) && !empty($link['attribs']['']['rel']) && $link['attribs']['']['rel'] == 'enclosure') 
     5455                if (isset($link['attribs']['']['href']) && !empty($link['attribs']['']['rel']) && $link['attribs']['']['rel'] === 'enclosure') 
    54065456                { 
    54075457                    // Attributes 
     
    54385488            foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'link') as $link) 
    54395489            { 
    5440                 if (isset($link['attribs']['']['href']) && !empty($link['attribs']['']['rel']) && $link['attribs']['']['rel'] == 'enclosure') 
     5490                if (isset($link['attribs']['']['href']) && !empty($link['attribs']['']['rel']) && $link['attribs']['']['rel'] === 'enclosure') 
    54415491                { 
    54425492                    // Attributes 
     
    54715521            } 
    54725522 
    5473             if ($enclosure = $this->get_item_tags('', 'enclosure')) 
     5523            if ($enclosure = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'enclosure')) 
    54745524            { 
    54755525                if (isset($enclosure[0]['attribs']['']['url'])) 
     
    55065556            } 
    55075557 
    5508             if (sizeof($this->data['enclosures']) == 0 && ($url || $type || $length || $bitrate || $captions_parent || $categories_parent || $channels || $copyrights_parent || $credits_parent || $description_parent || $duration_parent || $expression || $framerate || $hashes_parent || $height || $keywords_parent || $lang || $medium || $player_parent || $ratings_parent || $restrictions_parent || $samplingrate || $thumbnails_parent || $title_parent || $width)) 
     5558            if (sizeof($this->data['enclosures']) === 0 && ($url || $type || $length || $bitrate || $captions_parent || $categories_parent || $channels || $copyrights_parent || $credits_parent || $description_parent || $duration_parent || $expression || $framerate || $hashes_parent || $height || $keywords_parent || $lang || $medium || $player_parent || $ratings_parent || $restrictions_parent || $samplingrate || $thumbnails_parent || $title_parent || $width)) 
    55095559            { 
    55105560                // Since we don't have group or content for these, we'll just pass the '*_parent' variables directly to the constructor 
     
    55855635        if ($this->get_permalink() !== null) 
    55865636        { 
    5587             $return = $this->sanitize($item_url, SIMPLEPIE_CONSTRUCT_IRI) . rawurlencode($this->get_permalink()); 
     5637            $return = $item_url . rawurlencode($this->get_permalink()); 
    55885638            if ($title_url !== null && $this->get_title() !== null) 
    55895639            { 
    5590                 $return .= $this->sanitize($title_url, SIMPLEPIE_CONSTRUCT_IRI) . rawurlencode($this->get_title()); 
     5640                $return .= $title_url . rawurlencode($this->get_title()); 
    55915641            } 
    55925642            if ($summary_url !== null && $this->get_description() !== null) 
    55935643            { 
    5594                 $return .= $this->sanitize($summary_url, SIMPLEPIE_CONSTRUCT_IRI) . rawurlencode($this->get_description()); 
    5595             } 
    5596             return $return; 
     5644                $return .= $summary_url . rawurlencode($this->get_description()); 
     5645            } 
     5646            return $this->sanitize($return, SIMPLEPIE_CONSTRUCT_IRI); 
    55975647        } 
    55985648        else 
     
    57345784            return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0])); 
    57355785        } 
    5736         elseif ($return = $this->get_source_tags('', 'title')) 
     5786        elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'title')) 
    57375787        { 
    57385788            return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0])); 
     
    57885838            $categories[] =& new $this->item->feed->category_class($term, $scheme, $label); 
    57895839        } 
    5790         foreach ((array) $this->get_source_tags('', 'category') as $category) 
    5791         { 
    5792             $categories[] =& new $this->item->feed->category_class($this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null); 
     5840        foreach ((array) $this->get_source_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'category') as $category) 
     5841        { 
     5842            // This is really the label, but keep this as the term also for BC. 
     5843            // Label will also work on retrieving because that falls back to term. 
     5844            $term = $this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT); 
     5845            if (isset($category['attribs']['']['domain'])) 
     5846            { 
     5847                $scheme = $this->sanitize($category['attribs']['']['domain'], SIMPLEPIE_CONSTRUCT_TEXT); 
     5848            } 
     5849            else 
     5850            { 
     5851                $scheme = null; 
     5852            } 
     5853            $categories[] =& new $this->item->feed->category_class($term, $scheme, null); 
    57935854        } 
    57945855        foreach ((array) $this->get_source_tags(SIMPLEPIE_NAMESPACE_DC_11, 'subject') as $category) 
     
    60226083                $this->data['links']['alternate'][] = $this->sanitize($links[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($links[0])); 
    60236084            } 
    6024             if ($links = $this->get_source_tags('', 'link')) 
     6085            if ($links = $this->get_source_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'link')) 
    60256086            { 
    60266087                $this->data['links']['alternate'][] = $this->sanitize($links[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($links[0])); 
     
    60426103                    } 
    60436104                } 
    6044                 elseif (substr($key, 0, 41) == SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY) 
     6105                elseif (substr($key, 0, 41) === SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY) 
    60456106                { 
    60466107                    $this->data['links'][substr($key, 41)] =& $this->data['links'][$key]; 
     
    60786139            return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0])); 
    60796140        } 
    6080         elseif ($return = $this->get_source_tags('', 'description')) 
     6141        elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'description')) 
    60816142        { 
    60826143            return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0])); 
     
    61146175            return $this->sanitize($return[0]['data'], SimplePie_Misc::atom_03_construct_type($return[0]['attribs']), $this->get_base($return[0])); 
    61156176        } 
    6116         elseif ($return = $this->get_source_tags('', 'copyright')) 
     6177        elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'copyright')) 
    61176178        { 
    61186179            return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); 
     
    61346195    function get_language() 
    61356196    { 
    6136         if ($return = $this->get_source_tags('', 'language')) 
     6197        if ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'language')) 
    61376198        { 
    61386199            return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT); 
     
    69336994 
    69346995        // Process values for 'auto' 
    6935         if ($width == 'auto') 
    6936         { 
    6937             if ($mime == 'video') 
    6938             { 
    6939                 if ($height == 'auto') 
     6996        if ($width === 'auto') 
     6997        { 
     6998            if ($mime === 'video') 
     6999            { 
     7000                if ($height === 'auto') 
    69407001                { 
    69417002                    $width = 480; 
     
    69567017        } 
    69577018 
    6958         if ($height == 'auto') 
    6959         { 
    6960             if ($mime == 'audio') 
     7019        if ($height === 'auto') 
     7020        { 
     7021            if ($mime === 'audio') 
    69617022            { 
    69627023                $height = 0; 
    69637024            } 
    6964             elseif ($mime == 'video') 
    6965             { 
    6966                 if ($width == 'auto') 
     7025            elseif ($mime === 'video') 
     7026            { 
     7027                if ($width === 'auto') 
    69677028                { 
    69687029                    if ($widescreen) 
     
    69897050            } 
    69907051        } 
    6991         elseif ($mime == 'audio') 
     7052        elseif ($mime === 'audio') 
    69927053        { 
    69937054            $height = 0; 
     
    69957056 
    69967057        // Set proper placeholder value 
    6997         if ($mime == 'audio') 
     7058        if ($mime === 'audio') 
    69987059        { 
    69997060            $placeholder = $audio; 
    70007061        } 
    7001         elseif ($mime == 'video') 
     7062        elseif ($mime === 'video') 
    70027063        { 
    70037064            $placeholder = $video; 
     
    70187079 
    70197080        // Odeo Feed MP3's 
    7020         if ($handler == 'odeo') 
     7081        if ($handler === 'odeo') 
    70217082        { 
    70227083            if ($native) 
     
    70317092 
    70327093        // Flash 
    7033         elseif ($handler == 'flash') 
     7094        elseif ($handler === 'flash') 
    70347095        { 
    70357096            if ($native) 
     
    70457106        // Flash Media Player file types. 
    70467107        // Preferred handler for MP3 file types. 
    7047         elseif ($handler == 'fmedia' || ($handler == 'mp3' && $mediaplayer != '')) 
     7108        elseif ($handler === 'fmedia' || ($handler === 'mp3' && $mediaplayer !== '')) 
    70487109        { 
    70497110            $height += 20; 
     
    70607121        // QuickTime 7 file types.  Need to test with QuickTime 6. 
    70617122        // Only handle MP3's if the Flash Media Player is not present. 
    7062         elseif ($handler == 'quicktime' || ($handler == 'mp3' && $mediaplayer == '')) 
     7123        elseif ($handler === 'quicktime' || ($handler === 'mp3' && $mediaplayer === '')) 
    70637124        { 
    70647125            $height += 16; 
    70657126            if ($native) 
    70667127            { 
    7067                 if ($placeholder != ""){ 
     7128                if ($placeholder !== '') 
     7129                { 
    70687130                    $embed .= "<embed type=\"$type\" style=\"cursor:hand; cursor:pointer;\" href=\"" . $this->get_link() . "\" src=\"$placeholder\" width=\"$width\" height=\"$height\" autoplay=\"false\" target=\"myself\" controller=\"false\" loop=\"$loop\" scale=\"aspect\" bgcolor=\"$bgcolor\" pluginspage=\"http://apple.com/quicktime/download/\"></embed>"; 
    70697131                } 
    7070                 else { 
     7132                else 
     7133                { 
    70717134                    $embed .= "<embed type=\"$type\" style=\"cursor:hand; cursor:pointer;\" src=\"" . $this->get_link() . "\" width=\"$width\" height=\"$height\" autoplay=\"false\" target=\"myself\" controller=\"true\" loop=\"$loop\" scale=\"aspect\" bgcolor=\"$bgcolor\" pluginspage=\"http://apple.com/quicktime/download/\"></embed>"; 
    70727135                } 
     
    70797142 
    70807143        // Windows Media 
    7081         elseif ($handler == 'wmedia') 
     7144        elseif ($handler === 'wmedia') 
    70827145        { 
    70837146            $height += 45; 
     
    71017164    { 
    71027165        // If it's Odeo, let's get it out of the way. 
    7103         if (substr(strtolower($this->get_link()), 0, 15) == 'http://odeo.com') 
     7166        if (substr(strtolower($this->get_link()), 0, 15) === 'http://odeo.com') 
    71047167        { 
    71057168            return 'odeo'; 
     
    76297692 
    76307693                $this->headers = curl_exec($fp); 
    7631                 if (curl_errno($fp) == 23 || curl_errno($fp) == 61) 
     7694                if (curl_errno($fp) === 23 || curl_errno($fp) === 61) 
    76327695                { 
    76337696                    curl_setopt($fp, CURLOPT_ENCODING, 'none'); 
     
    76517714                        $this->body = $parser->body; 
    76527715                        $this->status_code = $parser->status_code; 
    7653                         if (($this->status_code == 300 || $this->status_code == 301 || $this->status_code == 302 || $this->status_code == 303 || $this->status_code == 307 || $this->status_code > 307 && $this->status_code < 400) && isset($this->headers['location']) && $this->redirects < $redirects) 
     7716                        if ((in_array($this->status_code, array(300, 301, 302, 303, 307)) || $this->status_code > 307 && $this->status_code < 400) && isset($this->headers['location']) && $this->redirects < $redirects) 
    76547717                        { 
    76557718                            $this->redirects++; 
     
    76647727                $this->method = SIMPLEPIE_FILE_SOURCE_REMOTE | SIMPLEPIE_FILE_SOURCE_FSOCKOPEN; 
    76657728                $url_parts = parse_url($url); 
    7666                 if (isset($url_parts['scheme']) && strtolower($url_parts['scheme']) == 'https') 
     7729                if (isset($url_parts['scheme']) && strtolower($url_parts['scheme']) === 'https') 
    76677730                { 
    76687731                    $url_parts['host'] = "ssl://$url_parts[host]"; 
     
    77327795                            $this->body = $parser->body; 
    77337796                            $this->status_code = $parser->status_code; 
    7734                             if (($this->status_code == 300 || $this->status_code == 301 || $this->status_code == 302 || $this->status_code == 303 || $this->status_code == 307 || $this->status_code > 307 && $this->status_code < 400) && isset($this->headers['location']) && $this->redirects < $redirects) 
     7797                            if ((in_array($this->status_code, array(300, 301, 302, 303, 307)) || $this->status_code > 307 && $this->status_code < 400) && isset($this->headers['location']) && $this->redirects < $redirects) 
    77357798                            { 
    77367799                                $this->redirects++; 
     
    84398502            { 
    84408503                // Get the length of the filename 
    8441                 $len = strspn($this->compressed_data, "\x00", $this->position); 
     8504                $len = strcspn($this->compressed_data, "\x00", $this->position); 
    84428505 
    84438506                // Check the length of the string is still valid 
     
    84598522            { 
    84608523                // Get the length of the comment 
    8461                 $len = strspn($this->compressed_data, "\x00", $this->position); 
     8524                $len = strcspn($this->compressed_data, "\x00", $this->position); 
    84628525 
    84638526                // Check the length of the string is still valid 
     
    85578620    function create($location, $filename, $extension) 
    85588621    { 
    8559         return new SimplePie_Cache_File($location, $filename, $extension); 
     8622        $location_iri =& new SimplePie_IRI($location); 
     8623        switch ($location_iri->get_scheme()) 
     8624        { 
     8625            case 'mysql': 
     8626                if (extension_loaded('mysql')) 
     8627                { 
     8628                    return new SimplePie_Cache_MySQL($location_iri, $filename, $extension); 
     8629                } 
     8630                break; 
     8631 
     8632            default: 
     8633                return new SimplePie_Cache_File($location, $filename, $extension); 
     8634        } 
    85608635    } 
    85618636} 
     
    85718646    { 
    85728647        $this->location = $location; 
    8573         $this->filename = rawurlencode($filename); 
    8574         $this->extension = rawurlencode($extension); 
    8575         $this->name = "$location/$this->filename.$this->extension"; 
     8648        $this->filename = $filename; 
     8649        $this->extension = $extension; 
     8650        $this->name = "$this->location/$this->filename.$this->extension"; 
    85768651    } 
    85778652 
     
    86428717} 
    86438718 
     8719class SimplePie_Cache_DB 
     8720{ 
     8721    function prepare_simplepie_object_for_cache($data) 
     8722    { 
     8723        $items = $data->get_items(); 
     8724        $items_by_id = array(); 
     8725 
     8726        if (!empty($items)) 
     8727        { 
     8728            foreach ($items as $item) 
     8729            { 
     8730                $items_by_id[$item->get_id()] = $item; 
     8731            } 
     8732 
     8733            if (count($items_by_id) !== count($items)) 
     8734            { 
     8735                $items_by_id = array(); 
     8736                foreach ($items as $item) 
     8737                { 
     8738                    $items_by_id[$item->get_id(true)] = $item; 
     8739                } 
     8740            } 
     8741 
     8742            if (isset($data->data['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['feed'][0])) 
     8743            { 
     8744                $channel =& $data->data['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['feed'][0]; 
     8745            } 
     8746            elseif (isset($data->data['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['feed'][0])) 
     8747            { 
     8748                $channel =& $data->data['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['feed'][0]; 
     8749            } 
     8750            elseif (isset($data->data['child'][SIMPLEPIE_NAMESPACE_RDF]['RDF'][0])) 
     8751            { 
     8752                $channel =& $data->data['child'][SIMPLEPIE_NAMESPACE_RDF]['RDF'][0]; 
     8753            } 
     8754            elseif (isset($data->data['child'][SIMPLEPIE_NAMESPACE_RSS_20]['rss'][0]['child'][SIMPLEPIE_NAMESPACE_RSS_20]['channel'][0])) 
     8755            { 
     8756                $channel =& $data->data['child'][SIMPLEPIE_NAMESPACE_RSS_20]['rss'][0]['child'][SIMPLEPIE_NAMESPACE_RSS_20]['channel'][0]; 
     8757            } 
     8758            else 
     8759            { 
     8760                $channel = null; 
     8761            } 
     8762 
     8763            if ($channel !== null) 
     8764            { 
     8765                if (isset($channel['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['entry'])) 
     8766                { 
     8767                    unset($channel['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['entry']); 
     8768                } 
     8769                if (isset($channel['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['entry'])) 
     8770                { 
     8771                    unset($channel['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['entry']); 
     8772                } 
     8773                if (isset($channel['child'][SIMPLEPIE_NAMESPACE_RSS_10]['item'])) 
     8774                { 
     8775                    unset($channel['child'][SIMPLEPIE_NAMESPACE_RSS_10]['item']); 
     8776                } 
     8777                if (isset($channel['child'][SIMPLEPIE_NAMESPACE_RSS_090]['item'])) 
     8778                { 
     8779                    unset($channel['child'][SIMPLEPIE_NAMESPACE_RSS_090]['item']); 
     8780                } 
     8781                if (isset($channel['child'][SIMPLEPIE_NAMESPACE_RSS_20]['item'])) 
     8782                { 
     8783                    unset($channel['child'][SIMPLEPIE_NAMESPACE_RSS_20]['item']); 
     8784                } 
     8785            } 
     8786            if (isset($data->data['items'])) 
     8787            { 
     8788                unset($data->data['items']); 
     8789            } 
     8790            if (isset($data->data['ordered_items'])) 
     8791            { 
     8792                unset($data->data['ordered_items']); 
     8793            } 
     8794        } 
     8795        return array(serialize($data->data), $items_by_id); 
     8796    } 
     8797} 
     8798 
     8799class SimplePie_Cache_MySQL extends SimplePie_Cache_DB 
     8800{ 
     8801    var $mysql; 
     8802    var $options; 
     8803    var $id; 
     8804 
     8805    function SimplePie_Cache_MySQL($mysql_location, $name, $extension) 
     8806    { 
     8807        $host = $mysql_location->get_host(); 
     8808        if (SimplePie_Misc::stripos($host, 'unix(') === 0 && substr($host, -1) === ')') 
     8809        { 
     8810            $server = ':' . substr($host, 5, -1); 
     8811        } 
     8812        else 
     8813        { 
     8814            $server = $host; 
     8815            if ($mysql_location->get_port() !== null) 
     8816            { 
     8817                $server .= ':' . $mysql_location->get_port(); 
     8818            } 
     8819        } 
     8820 
     8821        if (strpos($mysql_location->get_userinfo(), ':') !== false) 
     8822        { 
     8823            list($username, $password) = explode(':', $mysql_location->get_userinfo(), 2); 
     8824        } 
     8825        else 
     8826        { 
     8827            $username = $mysql_location->get_userinfo(); 
     8828            $password = null; 
     8829        } 
     8830 
     8831        if ($this->mysql = mysql_connect($server, $username, $password)) 
     8832        { 
     8833            $this->id = $name . $extension; 
     8834            $this->options = SimplePie_Misc::parse_str($mysql_location->get_query()); 
     8835            if (!isset($this->options['prefix'][0])) 
     8836            { 
     8837                $this->options['prefix'][0] = ''; 
     8838            } 
     8839 
     8840            if (mysql_select_db(ltrim($mysql_location->get_path(), '/')) 
     8841                && mysql_query('SET NAMES utf8') 
     8842                && ($query = mysql_unbuffered_query('SHOW TABLES'))) 
     8843            { 
     8844                $db = array(); 
     8845                while ($row = mysql_fetch_row($query)) 
     8846                { 
     8847                    $db[] = $row[0]; 
     8848                } 
     8849 
     8850                if (!in_array($this->options['prefix'][0] . 'cache_data', $db)) 
     8851                { 
     8852                    if (!mysql_query('CREATE TABLE `' . $this->options['prefix'][0] . 'cache_data` (`id` TEXT CHARACTER SET utf8 NOT NULL, `items` SMALLINT NOT NULL DEFAULT 0, `data` BLOB NOT NULL, `mtime` INT UNSIGNED NOT NULL, UNIQUE (`id`(125)))')) 
     8853                    { 
     8854                        $this->mysql = null; 
     8855                    } 
     8856                } 
     8857 
     8858                if (!in_array($this->options['prefix'][0] . 'items', $db)) 
     8859                { 
     8860                    if (!mysql_query('CREATE TABLE `' . $this->options['prefix'][0] . 'items` (`feed_id` TEXT CHARACTER SET utf8 NOT NULL, `id` TEXT CHARACTER SET utf8 NOT NULL, `data` TEXT CHARACTER SET utf8 NOT NULL, `posted` INT UNSIGNED NOT NULL, INDEX `feed_id` (`feed_id`(125)))')) 
     8861                    { 
     8862                        $this->mysql = null; 
     8863                    } 
     8864                } 
     8865            } 
     8866            else 
     8867            { 
     8868                $this->mysql = null; 
     8869            } 
     8870        } 
     8871    } 
     8872 
     8873    function save($data) 
     8874    { 
     8875        if ($this->mysql) 
     8876        { 
     8877            $feed_id = "'" . mysql_real_escape_string($this->id) . "'"; 
     8878 
     8879            if (is_a($data, 'SimplePie')) 
     8880            { 
     8881                if (SIMPLEPIE_PHP5) 
     8882                { 
     8883                    // This keyword needs to defy coding standards for PHP4 compatibility 
     8884                    $data = clone($data); 
     8885                } 
     8886 
     8887                $prepared = $this->prepare_simplepie_object_for_cache($data); 
     8888 
     8889                if ($query = mysql_query('SELECT `id` FROM `' . $this->options['prefix'][0] . 'cache_data` WHERE `id` = ' . $feed_id, $this->mysql)) 
     8890                { 
     8891                    if (mysql_num_rows($query)) 
     8892                    { 
     8893                        $items = count($prepared[1]); 
     8894                        if ($items) 
     8895                        { 
     8896                            $sql = 'UPDATE `' . $this->options['prefix'][0] . 'cache_data` SET `items` = ' . $items . ', `data` = \'' . mysql_real_escape_string($prepared[0]) . '\', `mtime` = ' . time() . ' WHERE `id` = ' . $feed_id; 
     8897                        } 
     8898                        else 
     8899                        { 
     8900                            $sql = 'UPDATE `' . $this->options['prefix'][0] . 'cache_data` SET `data` = \'' . mysql_real_escape_string($prepared[0]) . '\', `mtime` = ' . time() . ' WHERE `id` = ' . $feed_id; 
     8901                        } 
     8902 
     8903                        if (!mysql_query($sql, $this->mysql)) 
     8904                        { 
     8905                            return false; 
     8906                        } 
     8907                    } 
     8908                    elseif (!mysql_query('INSERT INTO `' . $this->options['prefix'][0] . 'cache_data` (`id`, `items`, `data`, `mtime`) VALUES(' . $feed_id . ', ' . count($prepared[1]) . ', \'' . mysql_real_escape_string($prepared[0]) . '\', ' . time() . ')', $this->mysql)) 
     8909                    { 
     8910                        return false; 
     8911                    } 
     8912 
     8913                    $ids = array_keys($prepared[1]); 
     8914                    if (!empty($ids)) 
     8915                    { 
     8916                        foreach ($ids as $id) 
     8917                        { 
     8918                            $database_ids[] = mysql_real_escape_string($id); 
     8919                        } 
     8920 
     8921                        if ($query = mysql_unbuffered_query('SELECT `id` FROM `' . $this->options['prefix'][0] . 'items` WHERE `id` = \'' . implode('\' OR `id` = \'', $database_ids) . '\' AND `feed_id` = ' . $feed_id, $this->mysql)) 
     8922                        { 
     8923                            $existing_ids = array(); 
     8924                            while ($row = mysql_fetch_row($query)) 
     8925                            { 
     8926                                $existing_ids[] = $row[0]; 
     8927                            } 
     8928 
     8929                            $new_ids = array_diff($ids, $existing_ids); 
     8930 
     8931                            foreach ($new_ids as $new_id) 
     8932                            { 
     8933                                if (!($date = $prepared[1][$new_id]->get_date('U'))) 
     8934                                { 
     8935                                    $date = time(); 
     8936                                } 
     8937 
     8938                                if (!mysql_query('INSERT INTO `' . $this->options['prefix'][0] . 'items` (`feed_id`, `id`, `data`, `posted`) VALUES(' . $feed_id . ', \'' . mysql_real_escape_string($new_id) . '\', \'' . mysql_real_escape_string(serialize($prepared[1][$new_id]->data)) . '\', ' . $date . ')', $this->mysql)) 
     8939                                { 
     8940                                    return false; 
     8941                                } 
     8942                            } 
     8943                            return true; 
     8944                        } 
     8945                    } 
     8946                    else 
     8947                    { 
     8948                        return true; 
     8949                    } 
     8950                } 
     8951            } 
     8952            elseif ($query = mysql_query('SELECT `id` FROM `' . $this->options['prefix'][0] . 'cache_data` WHERE `id` = ' . $feed_id, $this->mysql)) 
     8953            { 
     8954                if (mysql_num_rows($query)) 
     8955                { 
     8956                    if (mysql_query('UPDATE `' . $this->options['prefix'][0] . 'cache_data` SET `items` = 0, `data` = \'' . mysql_real_escape_string(serialize($data)) . '\', `mtime` = ' . time() . ' WHERE `id` = ' . $feed_id, $this->mysql)) 
     8957                    { 
     8958                        return true; 
     8959                    } 
     8960                } 
     8961                elseif (mysql_query('INSERT INTO `' . $this->options['prefix'][0] . 'cache_data` (`id`, `items`, `data`, `mtime`) VALUES(\'' . mysql_real_escape_string($this->id) . '\', 0, \'' . mysql_real_escape_string(serialize($data)) . '\', ' . time() . ')', $this->mysql)) 
     8962                { 
     8963                    return true; 
     8964                } 
     8965            } 
     8966        } 
     8967        return false; 
     8968    } 
     8969 
     8970    function load() 
     8971    { 
     8972        if ($this->mysql && ($query = mysql_query('SELECT `items`, `data` FROM `' . $this->options['prefix'][0] . 'cache_data` WHERE `id` = \'' . mysql_real_escape_string($this->id) . "'", $this->mysql)) && ($row = mysql_fetch_row($query))) 
     8973        { 
     8974            $data = unserialize($row[1]); 
     8975 
     8976            if (isset($this->options['items'][0])) 
     8977            { 
     8978                $items = (int) $this->options['items'][0]; 
     8979            } 
     8980            else 
     8981            { 
     8982                $items = (int) $row[0]; 
     8983            } 
     8984 
     8985            if ($items !== 0) 
     8986            { 
     8987                if (isset($data['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['feed'][0])) 
     8988                { 
     8989                    $feed =& $data['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['feed'][0]; 
     8990                } 
     8991                elseif (isset($data['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['feed'][0])) 
     8992                { 
     8993                    $feed =& $data['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['feed'][0]; 
     8994                } 
     8995                elseif (isset($data['child'][SIMPLEPIE_NAMESPACE_RDF]['RDF'][0])) 
     8996                { 
     8997                    $feed =& $data['child'][SIMPLEPIE_NAMESPACE_RDF]['RDF'][0]; 
     8998                } 
     8999                elseif (isset($data['child'][SIMPLEPIE_NAMESPACE_RSS_20]['rss'][0])) 
     9000                { 
     9001                    $feed =& $data['child'][SIMPLEPIE_NAMESPACE_RSS_20]['rss'][0]; 
     9002                } 
     9003                else 
     9004                { 
     9005                    $feed = null; 
     9006                } 
     9007 
     9008                if ($feed !== null) 
     9009                { 
     9010                    $sql = 'SELECT `data` FROM `' . $this->options['prefix'][0] . 'items` WHERE `feed_id` = \'' . mysql_real_escape_string($this->id) . '\' ORDER BY `posted` DESC'; 
     9011                    if ($items > 0) 
     9012                    { 
     9013                        $sql .= ' LIMIT ' . $items; 
     9014                    } 
     9015 
     9016                    if ($query = mysql_unbuffered_query($sql, $this->mysql)) 
     9017                    { 
     9018                        while ($row = mysql_fetch_row($query)) 
     9019                        { 
     9020                            $feed['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['entry'][] = unserialize($row[0]); 
     9021                        } 
     9022                    } 
     9023                    else 
     9024                    { 
     9025                        return false; 
     9026                    } 
     9027                } 
     9028            } 
     9029            return $data; 
     9030        } 
     9031        return false; 
     9032    } 
     9033 
     9034    function mtime() 
     9035    { 
     9036        if ($this->mysql && ($query = mysql_query('SELECT `mtime` FROM `' . $this->options['prefix'][0] . 'cache_data` WHERE `id` = \'' . mysql_real_escape_string($this->id) . "'", $this->mysql)) && ($row = mysql_fetch_row($query))) 
     9037        { 
     9038            return $row[0]; 
     9039        } 
     9040        else 
     9041        { 
     9042            return false; 
     9043        } 
     9044    } 
     9045 
     9046    function touch() 
     9047    { 
     9048        if ($this->mysql && ($query = mysql_query('UPDATE `' . $this->options['prefix'][0] . 'cache_data` SET `mtime` = ' . time() . ' WHERE `id` = \'' . mysql_real_escape_string($this->id) . "'", $this->mysql)) && mysql_affected_rows($this->mysql)) 
     9049        { 
     9050            return true; 
     9051        } 
     9052        else 
     9053        { 
     9054            return false; 
     9055        } 
     9056    } 
     9057 
     9058    function unlink() 
     9059    { 
     9060        if ($this->mysql && ($query = mysql_query('DELETE FROM `' . $this->options['prefix'][0] . 'cache_data` WHERE `id` = \'' . mysql_real_escape_string($this->id) . "'", $this->mysql)) && ($query2 = mysql_query('DELETE FROM `' . $this->options['prefix'][0] . 'items` WHERE `feed_id` = \'' . mysql_real_escape_string($this->id) . "'", $this->mysql))) 
     9061        { 
     9062            return true; 
     9063        } 
     9064        else 
     9065        { 
     9066            return false; 
     9067        } 
     9068    } 
     9069} 
     9070 
    86449071class SimplePie_Misc 
    86459072{ 
     
    86749101    function absolutize_url($relative, $base) 
    86759102    { 
    8676         if ($relative !== '') 
    8677         { 
    8678             $relative = SimplePie_Misc::parse_url($relative); 
    8679             if ($relative['scheme'] !== '') 
    8680             { 
    8681                 $target = $relative; 
    8682             } 
    8683             elseif ($base !== '') 
    8684             { 
    8685                 $base = SimplePie_Misc::parse_url($base); 
    8686                 $target = SimplePie_Misc::parse_url(''); 
    8687                 if ($relative['authority'] !== '') 
    8688                 { 
    8689                     $target = $relative; 
    8690                     $target['scheme'] = $base['scheme']; 
    8691                 } 
    8692                 else 
    8693                 { 
    8694                     $target['scheme'] = $base['scheme']; 
    8695                     $target['authority'] = $base['authority']; 
    8696                     if ($relative['path'] !== '') 
    8697                     { 
    8698                         if (strpos($relative['path'], '/') === 0) 
    8699                         { 
    8700                             $target['path'] = $relative['path']; 
    8701                         } 
    8702                         elseif ($base['authority'] !== '' && $base['path'] === '') 
    8703                         { 
    8704                             $target['path'] = '/' . $relative['path']; 
    8705                         } 
    8706                         elseif (($last_segment = strrpos($base['path'], '/')) !== false) 
    8707                         { 
    8708                             $target['path'] = substr($base['path'], 0, $last_segment + 1) . $relative['path']; 
    8709                         } 
    8710                         else 
    8711                         { 
    8712                             $target['path'] = $relative['path']; 
    8713                         } 
    8714                         $target['query'] = $relative['query']; 
    8715                     } 
    8716                     else 
    8717                     { 
    8718                         $target['path'] = $base['path']; 
    8719                         if ($relative['query'] !== '') 
    8720                         { 
    8721                             $target['query'] = $relative['query']; 
    8722                         } 
    8723                         elseif ($base['query'] !== '') 
    8724                         { 
    8725                             $target['query'] = $base['query']; 
    8726                         } 
    8727                     } 
    8728                 } 
    8729                 $target['fragment'] = $relative['fragment']; 
    8730             } 
    8731             else 
    8732             { 
    8733                 // No base URL, just return the relative URL 
    8734                 $target = $relative; 
    8735             } 
    8736             $return = SimplePie_Misc::compress_parse_url($target['scheme'], $target['authority'], $target['path'], $target['query'], $target['fragment']); 
    8737         } 
    8738         else 
    8739         { 
    8740             $return = $base; 
    8741         } 
    8742         $return = SimplePie_Misc::normalize_url($return); 
    8743         return $return; 
     9103        $iri = SimplePie_IRI::absolutize(new SimplePie_IRI($base), $relative); 
     9104        return $iri->get_iri(); 
    87449105    } 
    87459106 
     
    87479108    { 
    87489109        $output = ''; 
    8749         while (strpos($input, './') !== false || strpos($input, '/.') !== false || $input == '.' || $input == '..') 
     9110        while (strpos($input, './') !== false || strpos($input, '/.') !== false || $input === '.' || $input === '..') 
    87509111        { 
    87519112            // A: If the input buffer begins with a prefix of "../" or "./", then remove that prefix from the input buffer; otherwise, 
     
    87639124                $input = substr_replace($input, '/', 0, 3); 
    87649125            } 
    8765             elseif ($input == '/.') 
     9126            elseif ($input === '/.') 
    87669127            { 
    87679128                $input = '/'; 
     
    87739134                $output = substr_replace($output, '', strrpos($output, '/')); 
    87749135            } 
    8775             elseif ($input == '/..') 
     9136            elseif ($input === '/..') 
    87769137            { 
    87779138                $input = '/'; 
     
    87799140            } 
    87809141            // D: if the input buffer consists only of "." or "..", then remove that from the input buffer; otherwise, 
    8781             elseif ($input == '.' || $input == '..') 
     9142            elseif ($input === '.' || $input === '..') 
    87829143            { 
    87839144                $input = ''; 
     
    88239184                    for ($j = 0, $total_attribs = count($attribs); $j < $total_attribs; $j++) 
    88249185                    { 
    8825                         if (count($attribs[$j]) == 2) 
     9186                        if (count($attribs[$j]) === 2) 
    88269187                        { 
    88279188                            $attribs[$j][2] = $attribs[$j][1]; 
     
    88569217    function error($message, $level, $file, $line) 
    88579218    { 
    8858         switch ($level) 
    8859         { 
    8860             case E_USER_ERROR: 
    8861                 $note = 'PHP Error'; 
    8862                 break; 
    8863             case E_USER_WARNING: 
    8864                 $note = 'PHP Warning'; 
    8865                 break; 
    8866             case E_USER_NOTICE: 
    8867                 $note = 'PHP Notice'; 
    8868                 break; 
    8869             default: 
    8870                 $note = 'Unknown Error'; 
    8871                 break; 
    8872         } 
    8873         error_log("$note: $message in $file on line $line", 0); 
     9219        if ((ini_get('error_reporting') & $level) > 0) 
     9220        { 
     9221            switch ($level) 
     9222            { 
     9223                case E_USER_ERROR: 
     9224                    $note = 'PHP Error'; 
     9225                    break; 
     9226                case E_USER_WARNING: 
     9227                    $note = 'PHP Warning'; 
     9228                    break; 
     9229                case E_USER_NOTICE: 
     9230                    $note = 'PHP Notice'; 
     9231                    break; 
     9232                default: 
     9233                    $note = 'Unknown Error'; 
     9234                    break; 
     9235            } 
     9236            error_log("$note: $message in $file on line $line", 0); 
     9237        } 
    88749238        return $message; 
    88759239    } 
     
    89239287        $url = SimplePie_Misc::normalize_url($url); 
    89249288        $parsed = SimplePie_Misc::parse_url($url); 
    8925         if ($parsed['scheme'] !== '' && $parsed['scheme'] != 'http' && $parsed['scheme'] != 'https') 
     9289        if ($parsed['scheme'] !== '' && $parsed['scheme'] !== 'http' && $parsed['scheme'] !== 'https') 
    89269290        { 
    89279291            return SimplePie_Misc::fix_protocol(SimplePie_Misc::compress_parse_url('http', $parsed['authority'], $parsed['path'], $parsed['query'], $parsed['fragment']), $http); 
     
    89339297        } 
    89349298 
    8935         if ($http == 2 && $parsed['scheme'] !== '') 
     9299        if ($http === 2 && $parsed['scheme'] !== '') 
    89369300        { 
    89379301            return "feed:$url"; 
    89389302        } 
    8939         elseif ($http == 3 && strtolower($parsed['scheme']) == 'http') 
     9303        elseif ($http === 3 && strtolower($parsed['scheme']) === 'http') 
    89409304        { 
    89419305            return substr_replace($url, 'podcast', 0, 4); 
    89429306        } 
    8943         elseif ($http == 4 && strtolower($parsed['scheme']) == 'http') 
     9307        elseif ($http === 4 && strtolower($parsed['scheme']) === 'http') 
    89449308        { 
    89459309            return substr_replace($url, 'itpc', 0, 4); 
     
    89539317    function parse_url($url) 
    89549318    { 
    8955         preg_match('/^(([^:\/?#]+):)?(\/\/([^\/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?$/', $url, $match); 
    8956         for ($i = count($match); $i <= 9; $i++) 
    8957         { 
    8958             $match[$i] = ''; 
    8959         } 
    8960         return array('scheme' => $match[2], 'authority' => $match[4], 'path' => $match[5], 'query' => $match[7], 'fragment' => $match[9]); 
     9319        $iri =& new SimplePie_IRI($url); 
     9320        return array( 
     9321            'scheme' => (string) $iri->get_scheme(), 
     9322            'authority' => (string) $iri->get_authority(), 
     9323            'path' => (string) $iri->get_path(), 
     9324            'query' => (string) $iri->get_query(), 
     9325            'fragment' => (string) $iri->get_fragment() 
     9326        ); 
    89619327    } 
    89629328 
    89639329    function compress_parse_url($scheme = '', $authority = '', $path = '', $query = '', $fragment = '') 
    89649330    { 
    8965         $return = ''; 
    8966         if ($scheme !== '') 
    8967         { 
    8968             $return .= "$scheme:"; 
    8969         } 
    8970         if ($authority !== '') 
    8971         { 
    8972             $return .= "//$authority"; 
    8973         } 
    8974         if ($path !== '') 
    8975         { 
    8976             $return .= $path; 
    8977         } 
    8978         if ($query !== '') 
    8979         { 
    8980             $return .= "?$query"; 
    8981         } 
    8982         if ($fragment !== '') 
    8983         { 
    8984             $return .= "#$fragment"; 
    8985         } 
    8986         return $return; 
     9331        $iri =& new SimplePie_IRI(''); 
     9332        $iri->set_scheme($scheme); 
     9333        $iri->set_authority($authority); 
     9334        $iri->set_path($path); 
     9335        $iri->set_query($query); 
     9336        $iri->set_fragment($fragment); 
     9337        return $iri->get_iri(); 
    89879338    } 
    89889339 
    89899340    function normalize_url($url) 
    89909341    { 
    8991         $url = preg_replace_callback('/%([0-9A-Fa-f]{2})/', array('SimplePie_Misc', 'percent_encoding_normalization'), $url); 
    8992         $url = SimplePie_Misc::parse_url($url); 
    8993         $url['scheme'] = strtolower($url['scheme']); 
    8994         if ($url['authority'] !== '') 
    8995         { 
    8996             $url['authority'] = strtolower($url['authority']); 
    8997             $url['path'] = SimplePie_Misc::remove_dot_segments($url['path']); 
    8998         } 
    8999         return SimplePie_Misc::compress_parse_url($url['scheme'], $url['authority'], $url['path'], $url['query'], $url['fragment']); 
     9342        $iri =& new SimplePie_IRI($url); 
     9343        return $iri->get_iri(); 
    90009344    } 
    90019345 
     
    90039347    { 
    90049348        $integer = hexdec($match[1]); 
    9005         if ($integer >= 0x41 && $integer <= 0x5A || $integer >= 0x61 && $integer <= 0x7A || $integer >= 0x30 && $integer <= 0x39 || $integer == 0x2D || $integer == 0x2E || $integer == 0x5F || $integer == 0x7E) 
     9349        if ($integer >= 0x41 && $integer <= 0x5A || $integer >= 0x61 && $integer <= 0x7A || $integer >= 0x30 && $integer <= 0x39 || $integer === 0x2D || $integer === 0x2E || $integer === 0x5F || $integer === 0x7E) 
    90069350        { 
    90079351            return chr($integer); 
     
    90879431            return SimplePie_Misc::windows_1252_to_utf8($data); 
    90889432        } 
    9089         // This is second, as behaviour of this varies only with PHP version 
    9090         elseif (function_exists('mb_convert_encoding') && ($return = @mb_convert_encoding($data, $output, $input))) 
     9433        // This is second, as behaviour of this varies only with PHP version (the middle part of this expression checks the encoding is supported). 
     9434        elseif (function_exists('mb_convert_encoding') && @mb_convert_encoding("\x80", 'UTF-16BE', $input) !== "\x00\x80" && ($return = @mb_convert_encoding($data, $output, $input))) 
    90919435        { 
    90929436            return $return; 
     
    91069450    function encoding($charset) 
    91079451    { 
    9108         /* Character sets are case-insensitive, and also need some further 
    9109         normalization in the real world (though we'll return them in the form given 
    9110         in their registration). */ 
    9111         switch (strtolower(preg_replace('/[\x09-\x0D\x20-\x2F\x3A-\x40\x5B-\x60\x7B-\x7E]/', '', $charset))) 
     9452        // Normalization from UTS #22 
     9453        switch (strtolower(preg_replace('/(?:[^a-zA-Z0-9]+|([^0-9])0+)/', '\1', $charset))) 
    91129454        { 
    91139455            case 'adobestandardencoding': 
     
    91209462 
    91219463            case 'ami1251': 
    9122             case 'ami1251': 
    9123             case 'amiga1251': 
    91249464            case 'amiga1251': 
    91259465                return 'Amiga-1251'; 
     
    91359475            case 'asmo449': 
    91369476            case 'csiso89asmo449': 
     9477            case 'iso9036': 
    91379478            case 'isoir89': 
    9138             case 'iso9036': 
    91399479                return 'ASMO_449'; 
    91409480 
     
    91589498            case 'csiso4unitedkingdom': 
    91599499            case 'gb': 
     9500            case 'iso646gb': 
    91609501            case 'isoir4': 
    9161             case 'iso646gb': 
    91629502            case 'uk': 
    91639503                return 'BS_4730'; 
     
    91769516            case 'csaz243419851': 
    91779517            case 'csiso121canadian1': 
     9518            case 'iso646ca': 
    91789519            case 'isoir121': 
    9179             case 'iso646ca': 
    91809520                return 'CSA_Z243.4-1985-1'; 
    91819521 
     
    91839523            case 'csaz243419852': 
    91849524            case 'csiso122canadian2': 
     9525            case 'iso646ca2': 
    91859526            case 'isoir122': 
    9186             case 'iso646ca2': 
    91879527                return 'CSA_Z243.4-1985-2'; 
    91889528 
     
    92059545            case 'de': 
    92069546            case 'din66003': 
     9547            case 'iso646de': 
    92079548            case 'isoir21': 
    9208             case 'iso646de': 
    92099549                return 'DIN_66003'; 
    92109550 
     
    92159555            case 'csiso646danish': 
    92169556            case 'dk': 
    9217             case 'ds2089': 
    92189557            case 'ds2089': 
    92199558            case 'iso646dk': 
     
    92889627            case 'csiso17spanish': 
    92899628            case 'es': 
     9629            case 'iso646es': 
    92909630            case 'isoir17': 
    9291             case 'iso646es': 
    92929631                return 'ES'; 
    92939632 
    92949633            case 'csiso85spanish2': 
    92959634            case 'es2': 
     9635            case 'iso646es2': 
    92969636            case 'isoir85': 
    9297             case 'iso646es2': 
    92989637                return 'ES2'; 
    92999638 
     
    93109649                return 'GB18030'; 
    93119650 
     9651            case 'chinese': 
    93129652            case 'cp936': 
     9653            case 'csgb2312': 
     9654            case 'csiso58gb231280': 
     9655            case 'gb2312': 
     9656            case 'gb231280': 
    93139657            case 'gbk': 
     9658            case 'isoir58': 
    93149659            case 'ms936': 
    93159660            case 'windows936': 
    9316             case 'csgb2312': 
    9317             case 'gb2312': 
    9318             case 'chinese': 
    9319             case 'csiso58gb231280': 
    9320             case 'gb231280': 
    9321             case 'isoir58': 
    93229661                return 'GBK'; 
    93239662 
     
    93259664            case 'csiso57gb1988': 
    93269665            case 'gb198880': 
     9666            case 'iso646cn': 
    93279667            case 'isoir57': 
    9328             case 'iso646cn': 
    93299668                return 'GB_1988-80'; 
    93309669 
     
    93849723                return 'IBM-Thai'; 
    93859724 
    9386             case 'ccsid00858': 
    9387             case 'cp00858': 
    9388             case 'ibm00858': 
     9725            case 'ccsid858': 
     9726            case 'cp858': 
     9727            case 'ibm858': 
    93899728            case 'pcmultilingual850euro': 
    93909729                return 'IBM00858'; 
    93919730 
    9392             case 'ccsid00924': 
    9393             case 'cp00924': 
     9731            case 'ccsid924': 
     9732            case 'cp924': 
    93949733            case 'ebcdiclatin9euro': 
    9395             case 'ibm00924': 
     9734            case 'ibm924': 
    93969735                return 'IBM00924'; 
    93979736 
    9398             case 'ccsid01140': 
    9399             case 'cp01140': 
     9737            case 'ccsid1140': 
     9738            case 'cp1140': 
    94009739            case 'ebcdicus37euro': 
    9401             case 'ibm01140': 
     9740            case 'ibm1140': 
    94029741                return 'IBM01140'; 
    94039742 
    9404             case 'ccsid01141': 
    9405             case 'cp01141': 
     9743            case 'ccsid1141': 
     9744            case 'cp1141': 
    94069745            case 'ebcdicde273euro': 
    9407             case 'ibm01141': 
     9746            case 'ibm1141': 
    94089747                return 'IBM01141'; 
    94099748 
    9410             case 'ccsid01142': 
    9411             case 'cp01142': 
     9749            case 'ccsid1142': 
     9750            case 'cp1142': 
    94129751            case 'ebcdicdk277euro': 
    94139752            case 'ebcdicno277euro': 
    9414             case 'ibm01142': 
     9753            case 'ibm1142': 
    94159754                return 'IBM01142'; 
    94169755 
    9417             case 'ccsid01143': 
    9418             case 'cp01143': 
     9756            case 'ccsid1143': 
     9757            case 'cp1143': 
    94199758            case 'ebcdicfi278euro': 
    94209759            case 'ebcdicse278euro': 
    9421             case 'ibm01143': 
     9760            case 'ibm1143': 
    94229761                return 'IBM01143'; 
    94239762 
    9424             case 'ccsid01144': 
    9425             case 'cp01144': 
     9763            case 'ccsid1144': 
     9764            case 'cp1144': 
    94269765            case 'ebcdicit280euro': 
    9427             case 'ibm01144': 
     9766            case 'ibm1144': 
    94289767                return 'IBM01144'; 
    94299768 
    9430             case 'ccsid01145': 
    9431             case 'cp01145': 
     9769            case 'ccsid1145': 
     9770            case 'cp1145': 
    94329771            case 'ebcdices284euro': 
    9433             case 'ibm01145': 
     9772            case 'ibm1145': 
    94349773                return 'IBM01145'; 
    94359774 
    9436             case 'ccsid01146': 
    9437             case 'cp01146': 
     9775            case 'ccsid1146': 
     9776            case 'cp1146': 
    94389777            case 'ebcdicgb285euro': 
    9439             case 'ibm01146': 
     9778            case 'ibm1146': 
    94409779                return 'IBM01146'; 
    94419780 
    9442             case 'ccsid01147': 
    9443             case 'cp01147': 
     9781            case 'ccsid1147': 
     9782            case 'cp1147': 
    94449783            case 'ebcdicfr297euro': 
    9445             case 'ibm01147': 
     9784            case 'ibm1147': 
    94469785                return 'IBM01147'; 
    94479786 
    9448             case 'ccsid01148': 
    9449             case 'cp01148': 
     9787            case 'ccsid1148': 
     9788            case 'cp1148': 
    94509789            case 'ebcdicinternational500euro': 
    9451             case 'ibm01148': 
     9790            case 'ibm1148': 
    94529791                return 'IBM01148'; 
    94539792 
    9454             case 'ccsid01149': 
    9455             case 'cp01149': 
     9793            case 'ccsid1149': 
     9794            case 'cp1149': 
    94569795            case 'ebcdicis871euro': 
    9457             case 'ibm01149': 
     9796            case 'ibm1149': 
    94589797                return 'IBM01149'; 
    94599798 
    9460             case 'cp037': 
    9461             case 'csibm037': 
     9799            case 'cp37': 
     9800            case 'csibm37': 
    94629801            case 'ebcdiccpca': 
    94639802            case 'ebcdiccpnl': 
    94649803            case 'ebcdiccpus': 
    94659804            case 'ebcdiccpwt': 
    9466             case 'ibm037': 
     9805            case 'ibm37': 
    94679806                return 'IBM037'; 
    94689807 
    9469             case 'cp038': 
    9470             case 'csibm038': 
     9808            case 'cp38': 
     9809            case 'csibm38': 
    94719810            case 'ebcdicint': 
    9472             case 'ibm038': 
     9811            case 'ibm38': 
    94739812                return 'IBM038'; 
    94749813 
     
    96129951 
    96139952            case '861': 
     9953            case 'cp861': 
    96149954            case 'cpis': 
    9615             case 'cp861': 
    96169955            case 'csibm861': 
    96179956            case 'ibm861': 
     
    96479986                return 'IBM866'; 
    96489987 
     9988            case 'cp868': 
    96499989            case 'cpar': 
    9650             case 'cp868': 
    96519990            case 'csibm868': 
    96529991            case 'ibm868': 
     
    96549993 
    96559994            case '869': 
     9995            case 'cp869': 
    96569996            case 'cpgr': 
    9657             case 'cp869': 
    96589997            case 'csibm869': 
    96599998            case 'ibm869': 
     
    971310052 
    971410053            case 'ibm1047': 
    9715             case 'ibm1047': 
    971610054                return 'IBM1047'; 
    971710055 
     
    976810106            case 'csisolatin2': 
    976910107            case 'iso88592': 
     10108            case 'iso885921987': 
    977010109            case 'isoir101': 
    9771             case 'iso88592': 
    9772             case 'iso885921987': 
    977310110            case 'l2': 
    977410111            case 'latin2': 
     
    978110118            case 'csisolatin3': 
    978210119            case 'iso88593': 
     10120            case 'iso885931988': 
    978310121            case 'isoir109': 
    9784             case 'iso88593': 
    9785             case 'iso885931988': 
    978610122            case 'l3': 
    978710123            case 'latin3': 
     
    979010126            case 'csisolatin4': 
    979110127            case 'iso88594': 
     10128            case 'iso885941988': 
    979210129            case 'isoir110': 
    9793             case 'iso88594': 
    9794             case 'iso885941988': 
    979510130            case 'l4': 
    979610131            case 'latin4': 
     
    980010135            case 'cyrillic': 
    980110136            case 'iso88595': 
     10137            case 'iso885951988': 
    980210138            case 'isoir144': 
    9803             case 'iso88595': 
    9804             case 'iso885951988': 
    980510139                return 'ISO-8859-5'; 
    980610140 
     
    981010144            case 'ecma114': 
    981110145            case 'iso88596': 
     10146            case 'iso885961987': 
    981210147            case 'isoir127': 
    9813             case 'iso88596': 
    9814             case 'iso885961987': 
    981510148                return 'ISO-8859-6'; 
    981610149 
    981710150            case 'csiso88596e': 
    981810151            case 'iso88596e': 
    9819             case 'iso88596e': 
    982010152                return 'ISO-8859-6-E'; 
    982110153 
    982210154            case 'csiso88596i': 
    9823             case 'iso88596i': 
    982410155            case 'iso88596i': 
    982510156                return 'ISO-8859-6-I'; 
     
    983110162            case 'greek8': 
    983210163            case 'iso88597': 
     10164            case 'iso885971987': 
    983310165            case 'isoir126': 
    9834             case 'iso88597': 
    9835             case 'iso885971987': 
    983610166                return 'ISO-8859-7'; 
    983710167 
     
    983910169            case 'hebrew': 
    984010170            case 'iso88598': 
     10171            case 'iso885981988': 
    984110172            case 'isoir138': 
    9842             case 'iso88598': 
    9843             case 'iso885981988': 
    984410173                return 'ISO-8859-8'; 
    984510174 
    984610175            case 'csiso88598e': 
    984710176            case 'iso88598e': 
    9848             case 'iso88598e': 
    984910177                return 'ISO-8859-8-E'; 
    985010178 
    985110179            case 'csiso88598i': 
    9852             case 'iso88598i': 
    985310180            case 'iso88598i': 
    985410181                return 'ISO-8859-8-I'; 
     
    986010187            case 'csisolatin6': 
    986110188            case 'iso885910': 
     10189            case 'iso8859101992': 
    986210190            case 'isoir157': 
    9863             case 'iso8859101992': 
    986410191            case 'l6': 
    986510192            case 'latin6': 
     
    987010197 
    987110198            case 'iso885914': 
     10199            case 'iso8859141998': 
    987210200            case 'isoceltic': 
    987310201            case 'isoir199': 
    9874             case 'iso885914': 
    9875             case 'iso8859141998': 
    987610202            case 'l8': 
    987710203            case 'latin8': 
     
    987910205 
    988010206            case 'iso885915': 
    9881             case 'iso885915': 
    988210207            case 'latin9': 
    988310208                return 'ISO-8859-15'; 
    988410209 
    988510210            case 'iso885916': 
     10211            case 'iso8859162001': 
    988610212            case 'isoir226': 
    9887             case 'iso885916': 
    9888             case 'iso8859162001': 
    988910213            case 'l10': 
    989010214            case 'latin10': 
     
    991710241            case 'csiso115481': 
    991810242            case 'iso115481': 
    9919             case 'iso115481': 
    992010243            case 'isotr115481': 
    992110244                return 'ISO-11548-1'; 
     
    995210275            case 'csiso2intlrefversion': 
    995310276            case 'irv': 
     10277            case 'iso646irv1983': 
    995410278            case 'isoir2': 
    9955             case 'iso646irv1983': 
    995610279                return 'ISO_646.irv:1983'; 
    995710280 
    995810281            case 'csiso2033': 
    995910282            case 'e13b': 
     10283            case 'iso20331983': 
    996010284            case 'isoir98': 
    9961             case 'iso20331983': 
    996210285                return 'ISO_2033-1983'; 
    996310286 
    996410287            case 'csiso5427cyrillic': 
     10288            case 'iso5427': 
    996510289            case 'isoir37': 
    9966             case 'iso5427': 
    996710290                return 'ISO_5427'; 
    996810291 
    9969             case 'isoir54': 
    997010292            case 'iso5427cyrillic1981': 
    997110293            case 'iso54271981': 
     10294            case 'isoir54': 
    997210295                return 'ISO_5427:1981'; 
    997310296 
    997410297            case 'csiso5428greek': 
     10298            case 'iso54281980': 
    997510299            case 'isoir55': 
    9976             case 'iso54281980': 
    997710300                return 'ISO_5428:1980'; 
    997810301 
    997910302            case 'csiso6937add': 
     10303            case 'iso6937225': 
    998010304            case 'isoir152': 
    9981             case 'iso6937225': 
    998210305                return 'ISO_6937-2-25'; 
    998310306 
    998410307            case 'csisotextcomm': 
     10308            case 'iso69372add': 
    998510309            case 'isoir142': 
    9986             case 'iso69372add': 
    998710310                return 'ISO_6937-2-add'; 
    998810311 
    998910312            case 'csiso8859supp': 
     10313            case 'iso8859supp': 
    999010314            case 'isoir154': 
    9991             case 'iso8859supp': 
    999210315            case 'latin125': 
    999310316                return 'ISO_8859-supp'; 
    999410317 
    999510318            case 'csiso10367box': 
     10319            case 'iso10367box': 
    999610320            case 'isoir155': 
    9997             case 'iso10367box': 
    999810321                return 'ISO_10367-box'; 
    999910322 
    1000010323            case 'csiso15italian': 
     10324            case 'iso646it': 
    1000110325            case 'isoir15': 
    10002             case 'iso646it': 
    1000310326            case 'it': 
    1000410327                return 'IT'; 
     
    1000910332            case 'jisc62201969jp': 
    1001010333            case 'katakana': 
    10011             case 'x02017': 
     10334            case 'x2017': 
    1001210335                return 'JIS_C6220-1969-jp'; 
    1001310336 
    1001410337            case 'csiso14jisc6220ro': 
     10338            case 'iso646jp': 
    1001510339            case 'isoir14': 
    10016             case 'iso646jp': 
    1001710340            case 'jisc62201969ro': 
    1001810341            case 'jp': 
     
    1002410347                return 'JIS_C6226-1978'; 
    1002510348 
    10026             case 'csiso87jisx0208': 
     10349            case 'csiso87jisx208': 
    1002710350            case 'isoir87': 
    1002810351            case 'jisc62261983': 
    10029             case 'jisx02081983': 
    10030             case 'x0208': 
     10352            case 'jisx2081983': 
     10353            case 'x208': 
    1003110354                return 'JIS_C6226-1983'; 
    1003210355 
     
    1003810361 
    1003910362            case 'csiso92jisc62991984b': 
     10363            case 'iso646jpocrb': 
    1004010364            case 'isoir92': 
    10041             case 'iso646jpocrb': 
    1004210365            case 'jisc62291984b': 
    1004310366            case 'jpocrb': 
     
    1007210395 
    1007310396            case 'cshalfwidthkatakana': 
    10074             case 'jisx0201': 
    10075             case 'x0201': 
     10397            case 'jisx201': 
     10398            case 'x201': 
    1007610399                return 'JIS_X0201'; 
    1007710400 
    10078             case 'csiso159jisx02121990': 
     10401            case 'csiso159jisx2121990': 
    1007910402            case 'isoir159': 
    10080             case 'jisx02121990': 
    10081             case 'x0212': 
     10403            case 'jisx2121990': 
     10404            case 'x212': 
    1008210405                return 'JIS_X0212-1990'; 
    1008310406 
    1008410407            case 'csiso141jusib1002': 
     10408            case 'iso646yu': 
    1008510409            case 'isoir141': 
    10086             case 'iso646yu': 
    1008710410            case 'js': 
    1008810411            case 'jusib1002': 
     
    1015810481            case 'csiso86hungarian': 
    1015910482            case 'hu': 
     10483            case 'iso646hu': 
    1016010484            case 'isoir86': 
    10161             case 'iso646hu': 
    1016210485            case 'msz77953': 
    1016310486                return 'MSZ_7795.3'; 
     
    1018510508            case 'csiso151cuba': 
    1018610509            case 'cuba': 
     10510            case 'iso646cu': 
    1018710511            case 'isoir151': 
    10188             case 'iso646cu': 
    10189             case 'ncnc001081': 
     10512            case 'ncnc1081': 
    1019010513                return 'NC_NC00-10:81'; 
    1019110514 
    1019210515            case 'csiso69french': 
    1019310516            case 'fr': 
     10517            case 'iso646fr': 
    1019410518            case 'isoir69': 
    10195             case 'iso646fr': 
    1019610519            case 'nfz62010': 
    1019710520                return 'NF_Z_62-010'; 
    1019810521 
    1019910522            case 'csiso25french': 
     10523            case 'iso646fr1': 
    1020010524            case 'isoir25': 
    10201             case 'iso646fr1': 
    1020210525            case 'nfz620101973': 
    1020310526                return 'NF_Z_62-010_(1973)'; 
     
    1020510528            case 'csiso60danishnorwegian': 
    1020610529            case 'csiso60norwegian1': 
     10530            case 'iso646no': 
    1020710531            case 'isoir60': 
    10208             case 'iso646no': 
    1020910532            case 'no': 
    1021010533            case 'ns45511': 
     
    1021210535 
    1021310536            case 'csiso61norwegian2': 
     10537            case 'iso646no2': 
    1021410538            case 'isoir61': 
    10215             case 'iso646no2': 
    1021610539            case 'no2': 
    1021710540            case 'ns45512': 
    1021810541                return 'NS_4551-2'; 
    1021910542 
    10220             case 'osdebcdicdf03irv': 
     10543            case 'osdebcdicdf3irv': 
    1022110544                return 'OSD_EBCDIC_DF03_IRV'; 
    1022210545 
    10223             case 'osdebcdicdf041': 
     10546            case 'osdebcdicdf41': 
    1022410547                return 'OSD_EBCDIC_DF04_1'; 
    1022510548 
    10226             case 'osdebcdicdf0415': 
     10549            case 'osdebcdicdf415': 
    1022710550                return 'OSD_EBCDIC_DF04_15'; 
    1022810551 
     
    1023610559 
    1023710560            case 'csiso16portuguese': 
     10561            case 'iso646pt': 
    1023810562            case 'isoir16': 
    10239             case 'iso646pt': 
    1024010563            case 'pt': 
    1024110564                return 'PT'; 
    1024210565 
    1024310566            case 'csiso84portuguese2': 
     10567            case 'iso646pt2': 
    1024410568            case 'isoir84': 
    10245             case 'iso646pt2': 
    1024610569            case 'pt2': 
    1024710570                return 'PT2'; 
     
    1025910582            case 'csiso10swedish': 
    1026010583            case 'fi': 
    10261             case 'isoir10': 
    1026210584            case 'iso646fi': 
    1026310585            case 'iso646se': 
     10586            case 'isoir10': 
    1026410587            case 'se': 
    1026510588            case 'sen850200b': 
     
    1026710590 
    1026810591            case 'csiso11swedishfornames': 
     10592            case 'iso646se2': 
    1026910593            case 'isoir11': 
    10270             case 'iso646se2': 
    1027110594            case 'se2': 
    1027210595            case 'sen850200c': 
     
    1031610639            case 'csascii': 
    1031710640            case 'ibm367': 
     10641            case 'iso646irv1991': 
     10642            case 'iso646us': 
    1031810643            case 'isoir6': 
    10319             case 'iso646us': 
    10320             case 'iso646irv1991': 
    1032110644            case 'us': 
    1032210645            case 'usascii': 
     
    1038210705            case 'iso885911': 
    1038310706            case 'tis620': 
    10384                 return 'Windows-874'; 
     10707                return 'windows-874'; 
    1038510708 
    1038610709            case 'cseuckr': 
     10710            case 'csksc56011987': 
    1038710711            case 'euckr': 
    10388             case 'windows949': 
    10389             case 'csksc56011987': 
    1039010712            case 'isoir149': 
    1039110713            case 'korean': 
     
    1039310715            case 'ksc56011987': 
    1039410716            case 'ksc56011989': 
    10395                 return 'Windows-949'; 
     10717            case 'windows949': 
     10718                return 'windows-949'; 
    1039610719 
    1039710720            case 'windows1250': 
     
    1040510728            case 'ibm819': 
    1040610729            case 'iso88591': 
     10730            case 'iso885911987': 
    1040710731            case 'isoir100': 
    10408             case 'iso885911987': 
    1040910732            case 'l1': 
    1041010733            case 'latin1': 
    1041110734            case 'windows1252': 
    10412                 return 'Windows-1252'; 
    10413  
    10414             case 'windows1252': 
    1041510735                return 'windows-1252'; 
    1041610736 
     
    1042010740            case 'csisolatin5': 
    1042110741            case 'iso88599': 
     10742            case 'iso885991989': 
    1042210743            case 'isoir148': 
    10423             case 'iso885991989': 
    1042410744            case 'l5': 
    1042510745            case 'latin5': 
    1042610746            case 'windows1254': 
    10427                 return 'Windows-1254'; 
    10428  
    10429             case 'windows1254': 
    1043010747                return 'windows-1254'; 
    1043110748 
     
    1045310770            $curl = $curl['version']; 
    1045410771        } 
    10455         elseif (substr($curl, 0, 5) == 'curl/') 
     10772        elseif (substr($curl, 0, 5) === 'curl/') 
    1045610773        { 
    1045710774            $curl = substr($curl, 5, strcspn($curl, "\x09\x0A\x0B\x0C\x0D", 5)); 
    1045810775        } 
    10459         elseif (substr($curl, 0, 8) == 'libcurl/') 
     10776        elseif (substr($curl, 0, 8) === 'libcurl/') 
    1046010777        { 
    1046110778            $curl = substr($curl, 8, strcspn($curl, "\x09\x0A\x0B\x0C\x0D", 8)); 
     
    1047010787    function is_subclass_of($class1, $class2) 
    1047110788    { 
    10472         if (func_num_args() != 2) 
     10789        if (func_num_args() !== 2) 
    1047310790        { 
    1047410791            trigger_error('Wrong parameter count for SimplePie_Misc::is_subclass_of()', E_USER_WARNING); 
     
    1048710804                    while ($class1 = strtolower(get_parent_class($class1))) 
    1048810805                    { 
    10489                         if ($class1 == $class2) 
     10806                        if ($class1 === $class2) 
    1049010807                        { 
    1049110808                            return true; 
     
    1063410951    function atom_03_construct_type($attribs) 
    1063510952    { 
    10636         if (isset($attribs['']['mode']) && strtolower(trim($attribs['']['mode']) == 'base64')) 
     10953        if (isset($attribs['']['mode']) && strtolower(trim($attribs['']['mode']) === 'base64')) 
    1063710954        { 
    1063810955            $mode = SIMPLEPIE_CONSTRUCT_BASE64; 
     
    1070611023                    return SIMPLEPIE_CONSTRUCT_XHTML; 
    1070711024            } 
    10708             if (in_array(substr($type, -4), array('+xml', '/xml')) || substr($type, 0, 5) == 'text/') 
     11025            if (in_array(substr($type, -4), array('+xml', '/xml')) || substr($type, 0, 5) === 'text/') 
    1070911026            { 
    1071011027                return SIMPLEPIE_CONSTRUCT_NONE; 
     
    1100611323        return $encoding; 
    1100711324    } 
     11325 
     11326    function output_javascript() 
     11327    { 
     11328        if (function_exists('ob_gzhandler')) 
     11329        { 
     11330            ob_start('ob_gzhandler'); 
     11331        } 
     11332        header('Content-type: text/javascript; charset: UTF-8'); 
     11333        header('Cache-Control: must-revalidate'); 
     11334        header('Expires: ' . gmdate('D, d M Y H:i:s', time() + 604800) . ' GMT'); // 7 days 
     11335        ?> 
     11336function embed_odeo(link) { 
     11337    document.writeln('<embed src="http://odeo.com/flash/audio_player_fullsize.swf" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" quality="high" width="440" height="80" wmode="transparent" allowScriptAccess="any" flashvars="valid_sample_rate=true&external_url='+link+'"></embed>'); 
     11338} 
     11339 
     11340function embed_quicktime(type, bgcolor, width, height, link, placeholder, loop) { 
     11341    if (placeholder != '') { 
     11342        document.writeln('<embed type="'+type+'" style="cursor:hand; cursor:pointer;" href="'+link+'" src="'+placeholder+'" width="'+width+'" height="'+height+'" autoplay="false" target="myself" controller="false" loop="'+loop+'" scale="aspect" bgcolor="'+bgcolor+'" pluginspage="http://www.apple.com/quicktime/download/"></embed>'); 
     11343    } 
     11344    else { 
     11345        document.writeln('<embed type="'+type+'" style="cursor:hand; cursor:pointer;" src="'+link+'" width="'+width+'" height="'+height+'" autoplay="false" target="myself" controller="true" loop="'+loop+'" scale="aspect" bgcolor="'+bgcolor+'" pluginspage="http://www.apple.com/quicktime/download/"></embed>'); 
     11346    } 
     11347} 
     11348 
     11349function embed_flash(bgcolor, width, height, link, loop, type) { 
     11350    document.writeln('<embed src="'+link+'" pluginspage="http://www.macromedia.com/go/getflashplayer" type="'+type+'" quality="high" width="'+width+'" height="'+height+'" bgcolor="'+bgcolor+'" loop="'+loop+'"></embed>'); 
     11351} 
     11352 
     11353function embed_flv(width, height, link, placeholder, loop, player) { 
     11354    document.writeln('<embed src="'+player+'" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" quality="high" width="'+width+'" height="'+height+'" wmode="transparent" flashvars="file='+link+'&autostart=false&repeat='+loop+'&showdigits=true&showfsbutton=false"></embed>'); 
     11355} 
     11356 
     11357function embed_wmedia(width, height, link) { 
     11358    document.writeln('<embed type="application/x-mplayer2" src="'+link+'" autosize="1" width="'+width+'" height="'+height+'" showcontrols="1" showstatusbar="0" showdisplay="0" autostart="0"></embed>'); 
     11359} 
     11360        <?php 
     11361    } 
    1100811362} 
    1100911363 
     
    1108411438        else 
    1108511439        { 
    11086             $this->consumed = false; 
    1108711440            return false; 
    1108811441        } 
     
    1110711460        else 
    1110811461        { 
    11109             $this->consumed = false; 
    1111011462            return false; 
    1111111463        } 
     
    1118111533                    } 
    1118211534 
    11183                     if ($this->consume() != ';') 
     11535                    if (!in_array($this->consume(), array(';', false), true)) 
    1118411536                    { 
    1118511537                        $this->unconsume(); 
     
    1121011562                } 
    1121111563                break; 
     11564        } 
     11565    } 
     11566} 
     11567 
     11568/** 
     11569 * IRI parser/serialiser 
     11570 * 
     11571 * @package SimplePie 
     11572 */ 
     11573class SimplePie_IRI 
     11574{ 
     11575    /** 
     11576     * Scheme 
     11577     * 
     11578     * @access private 
     11579     * @var string 
     11580     */ 
     11581    var $scheme; 
     11582 
     11583    /** 
     11584     * User Information 
     11585     * 
     11586     * @access private 
     11587     * @var string 
     11588     */ 
     11589    var $userinfo; 
     11590 
     11591    /** 
     11592     * Host 
     11593     * 
     11594     * @access private 
     11595     * @var string 
     11596     */ 
     11597    var $host; 
     11598 
     11599    /** 
     11600     * Port 
     11601     * 
     11602     * @access private 
     11603     * @var string 
     11604     */ 
     11605    var $port; 
     11606 
     11607    /** 
     11608     * Path 
     11609     * 
     11610     * @access private 
     11611     * @var string 
     11612     */ 
     11613    var $path; 
     11614 
     11615    /** 
     11616     * Query 
     11617     * 
     11618     * @access private 
     11619     * @var string 
     11620     */ 
     11621    var $query; 
     11622 
     11623    /** 
     11624     * Fragment 
     11625     * 
     11626     * @access private 
     11627     * @var string 
     11628     */ 
     11629    var $fragment; 
     11630 
     11631    /** 
     11632     * Whether the object represents a valid IRI 
     11633     * 
     11634     * @access private 
     11635     * @var array 
     11636     */ 
     11637    var $valid = array(); 
     11638 
     11639    /** 
     11640     * Return the entire IRI when you try and read the object as a string 
     11641     * 
     11642     * @access public 
     11643     * @return string 
     11644     */ 
     11645    function __toString() 
     11646    { 
     11647        return $this->get_iri(); 
     11648    } 
     11649 
     11650    /** 
     11651     * Create a new IRI object, from a specified string 
     11652     * 
     11653     * @access public 
     11654     * @param string $iri 
     11655     * @return SimplePie_IRI 
     11656     */ 
     11657    function SimplePie_IRI($iri) 
     11658    { 
     11659        $iri = (string) $iri; 
     11660        if ($iri !== '') 
     11661        { 
     11662            $parsed = $this->parse_iri($iri); 
     11663            $this->set_scheme($parsed['scheme']); 
     11664            $this->set_authority($parsed['authority']); 
     11665            $this->set_path($parsed['path']); 
     11666            $this->set_query($parsed['query']); 
     11667            $this->set_fragment($parsed['fragment']); 
     11668        } 
     11669    } 
     11670 
     11671    /** 
     11672     * Create a new IRI object by resolving a relative IRI 
     11673     * 
     11674     * @static 
     11675     * @access public 
     11676     * @param SimplePie_IRI $base Base IRI 
     11677     * @param string $relative Relative IRI 
     11678     * @return SimplePie_IRI 
     11679     */ 
     11680    function absolutize($base, $relative) 
     11681    { 
     11682        $relative = (string) $relative; 
     11683        if ($relative !== '') 
     11684        { 
     11685            $relative =& new SimplePie_IRI($relative); 
     11686            if ($relative->get_scheme() !== null) 
     11687            { 
     11688                $target = $relative; 
     11689            } 
     11690            elseif ($base->get_iri() !== null) 
     11691            { 
     11692                if ($relative->get_authority() !== null) 
     11693                { 
     11694                    $target = $relative; 
     11695                    $target->set_scheme($base->get_scheme()); 
     11696                } 
     11697                else 
     11698                { 
     11699                    $target =& new SimplePie_IRI(''); 
     11700                    $target->set_scheme($base->get_scheme()); 
     11701                    $target->set_userinfo($base->get_userinfo()); 
     11702                    $target->set_host($base->get_host()); 
     11703                    $target->set_port($base->get_port()); 
     11704                    if ($relative->get_path() !== null) 
     11705                    { 
     11706                        if (strpos($relative->get_path(), '/') === 0) 
     11707                        { 
     11708                            $target->set_path($relative->get_path()); 
     11709                        } 
     11710                        elseif (($base->get_userinfo() !== null || $base->get_host() !== null || $base->get_port() !== null) && $base->get_path() === null) 
     11711                        { 
     11712                            $target->set_path('/' . $relative->get_path()); 
     11713                        } 
     11714                        elseif (($last_segment = strrpos($base->get_path(), '/')) !== false) 
     11715                        { 
     11716                            $target->set_path(substr($base->get_path(), 0, $last_segment + 1) . $relative->get_path()); 
     11717                        } 
     11718                        else 
     11719                        { 
     11720                            $target->set_path($relative->get_path()); 
     11721                        } 
     11722                        $target->set_query($relative->get_query()); 
     11723                    } 
     11724                    else 
     11725                    { 
     11726                        $target->set_path($base->get_path()); 
     11727                        if ($relative->get_query() !== null) 
     11728                        { 
     11729                            $target->set_query($relative->get_query()); 
     11730                        } 
     11731                        elseif ($base->get_query() !== null) 
     11732                        { 
     11733                            $target->set_query($base->get_query()); 
     11734                        } 
     11735                    } 
     11736                } 
     11737                $target->set_fragment($relative->get_fragment()); 
     11738            } 
     11739            else 
     11740            { 
     11741                // No base URL, just return the relative URL 
     11742                $target = $relative; 
     11743            } 
     11744        } 
     11745        else 
     11746        { 
     11747            $target = $base; 
     11748        } 
     11749        return $target; 
     11750    } 
     11751 
     11752    /** 
     11753     * Parse an IRI into scheme/authority/path/query/fragment segments 
     11754     * 
     11755     * @access private 
     11756     * @param string $iri 
     11757     * @return array 
     11758     */ 
     11759    function parse_iri($iri) 
     11760    { 
     11761        preg_match('/^(([^:\/?#]+):)?(\/\/([^\/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?$/', $iri, $match); 
     11762        for ($i = count($match); $i <= 9; $i++) 
     11763        { 
     11764            $match[$i] = ''; 
     11765        } 
     11766        return array('scheme' => $match[2], 'authority' => $match[4], 'path' => $match[5], 'query' => $match[7], 'fragment' => $match[9]); 
     11767    } 
     11768 
     11769    /** 
     11770     * Remove dot segments from a path 
     11771     * 
     11772     * @access private 
     11773     * @param string $input 
     11774     * @return string 
     11775     */ 
     11776    function remove_dot_segments($input) 
     11777    { 
     11778        $output = ''; 
     11779        while (strpos($input, './') !== false || strpos($input, '/.') !== false || $input === '.' || $input === '..') 
     11780        { 
     11781            // A: If the input buffer begins with a prefix of "../" or "./", then remove that prefix from the input buffer; otherwise, 
     11782            if (strpos($input, '../') === 0) 
     11783            { 
     11784                $input = substr($input, 3); 
     11785            } 
     11786            elseif (strpos($input, './') === 0) 
     11787            { 
     11788                $input = substr($input, 2); 
     11789            } 
     11790            // B: if the input buffer begins with a prefix of "/./" or "/.", where "." is a complete path segment, then replace that prefix with "/" in the input buffer; otherwise, 
     11791            elseif (strpos($input, '/./') === 0) 
     11792            { 
     11793                $input = substr_replace($input, '/', 0, 3); 
     11794            } 
     11795            elseif ($input === '/.') 
     11796            { 
     11797                $input = '/'; 
     11798            } 
     11799            // C: if the input buffer begins with a prefix of "/../" or "/..", where ".." is a complete path segment, then replace that prefix with "/" in the input buffer and remove the last segment and its preceding "/" (if any) from the output buffer; otherwise, 
     11800            elseif (strpos($input, '/../') === 0) 
     11801            { 
     11802                $input = substr_replace($input, '/', 0, 4); 
     11803                $output = substr_replace($output, '', strrpos($output, '/')); 
     11804            } 
     11805            elseif ($input === '/..') 
     11806            { 
     11807                $input = '/'; 
     11808                $output = substr_replace($output, '', strrpos($output, '/')); 
     11809            } 
     11810            // D: if the input buffer consists only of "." or "..", then remove that from the input buffer; otherwise, 
     11811            elseif ($input === '.' || $input === '..') 
     11812            { 
     11813                $input = ''; 
     11814            } 
     11815            // E: move the first path segment in the input buffer to the end of the output buffer, including the initial "/" character (if any) and any subsequent characters up to, but not including, the next "/" character or the end of the input buffer 
     11816            elseif (($pos = strpos($input, '/', 1)) !== false) 
     11817            { 
     11818                $output .= substr($input, 0, $pos); 
     11819                $input = substr_replace($input, '', 0, $pos); 
     11820            } 
     11821            else 
     11822            { 
     11823                $output .= $input; 
     11824                $input = ''; 
     11825            } 
     11826        } 
     11827        return $output . $input; 
     11828    } 
     11829 
     11830    /** 
     11831     * Replace invalid character with percent encoding 
     11832     * 
     11833     * @access private 
     11834     * @param string $string Input string 
     11835     * @param string $valid_chars Valid characters 
     11836     * @param int $case Normalise case 
     11837     * @return string 
     11838     */ 
     11839    function replace_invalid_with_pct_encoding($string, $valid_chars, $case = SIMPLEPIE_SAME_CASE) 
     11840    { 
     11841        // Normalise case 
     11842        if ($case & SIMPLEPIE_LOWERCASE) 
     11843        { 
     11844            $string = strtolower($string); 
     11845        } 
     11846        elseif ($case & SIMPLEPIE_UPPERCASE) 
     11847        { 
     11848            $string = strtoupper($string); 
     11849        } 
     11850 
     11851        // Store position and string length (to avoid constantly recalculating this) 
     11852        $position = 0; 
     11853        $strlen = strlen($string); 
     11854 
     11855        // Loop as long as we have invalid characters, advancing the position to the next invalid character 
     11856        while (($position += strspn($string, $valid_chars, $position)) < $strlen) 
     11857        { 
     11858            // If we have a % character 
     11859            if ($string[$position] === '%') 
     11860            { 
     11861                // If we have a pct-encoded section 
     11862                if ($position + 2 < $strlen && strspn($string, '0123456789ABCDEFabcdef', $position + 1, 2) === 2) 
     11863                { 
     11864                    // Get the the represented character 
     11865                    $chr = chr(hexdec(substr($string, $position + 1, 2))); 
     11866 
     11867                    // If the character is valid, replace the pct-encoded with the actual character while normalising case 
     11868                    if (strpos($valid_chars, $chr) !== false) 
     11869                    { 
     11870                        if ($case & SIMPLEPIE_LOWERCASE) 
     11871                        { 
     11872                            $chr = strtolower($chr); 
     11873                        } 
     11874                        elseif ($case & SIMPLEPIE_UPPERCASE) 
     11875                        { 
     11876                            $chr = strtoupper($chr); 
     11877                        } 
     11878                        $string = substr_replace($string, $chr, $position, 3); 
     11879                        $strlen -= 2; 
     11880                        $position++; 
     11881                    } 
     11882 
     11883                    // Otherwise just normalise the pct-encoded to uppercase 
     11884                    else 
     11885                    { 
     11886                        $string = substr_replace($string, strtoupper(substr($string, $position + 1, 2)), $position + 1, 2); 
     11887                        $position += 3; 
     11888                    } 
     11889                } 
     11890                // If we don't have a pct-encoded section, just replace the % with its own esccaped form 
     11891                else 
     11892                { 
     11893                    $string = substr_replace($string, '%25', $position, 1); 
     11894                    $strlen += 2; 
     11895                    $position += 3; 
     11896                } 
     11897            } 
     11898            // If we have an invalid character, change into its pct-encoded form 
     11899            else 
     11900            { 
     11901                $replacement = sprintf("%%%02X", ord($string[$position])); 
     11902                $string = str_replace($string[$position], $replacement, $string); 
     11903                $strlen = strlen($string); 
     11904            } 
     11905        } 
     11906        return $string; 
     11907    } 
     11908 
     11909    /** 
     11910     * Check if the object represents a valid IRI 
     11911     * 
     11912     * @access public 
     11913     * @return bool 
     11914     */ 
     11915    function is_valid() 
     11916    { 
     11917        return array_sum($this->valid) === count($this->valid); 
     11918    } 
     11919 
     11920    /** 
     11921     * Set the scheme. Returns true on success, false on failure (if there are 
     11922     * any invalid characters). 
     11923     * 
     11924     * @access public 
     11925     * @param string $scheme 
     11926     * @return bool 
     11927     */ 
     11928    function set_scheme($scheme) 
     11929    { 
     11930        if ($scheme === null || $scheme === '') 
     11931        { 
     11932            $this->scheme = null; 
     11933        } 
     11934        else 
     11935        { 
     11936            $len = strlen($scheme); 
     11937            switch (true) 
     11938            { 
     11939                case $len > 1: 
     11940                    if (!strspn($scheme, 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+-.', 1)) 
     11941                    { 
     11942                        $this->scheme = null; 
     11943                        $this->valid[__FUNCTION__] = false; 
     11944                        return false; 
     11945                    } 
     11946 
     11947                case $len > 0: 
     11948                    if (!strspn($scheme, 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz', 0, 1)) 
     11949                    { 
     11950                        $this->scheme = null; 
     11951                        $this->valid[__FUNCTION__] = false; 
     11952                        return false; 
     11953                    } 
     11954            } 
     11955            $this->scheme = strtolower($scheme); 
     11956        } 
     11957        $this->valid[__FUNCTION__] = true; 
     11958        return true; 
     11959    } 
     11960 
     11961    /** 
     11962     * Set the authority. Returns true on success, false on failure (if there are 
     11963     * any invalid characters). 
     11964     * 
     11965     * @access public 
     11966     * @param string $authority 
     11967     * @return bool 
     11968     */ 
     11969    function set_authority($authority) 
     11970    { 
     11971        if (($userinfo_end = strrpos($authority, '@')) !== false) 
     11972        { 
     11973            $userinfo = substr($authority, 0, $userinfo_end); 
     11974            $authority = substr($authority, $userinfo_end + 1); 
     11975        } 
     11976        else 
     11977        { 
     11978            $userinfo = null; 
     11979        } 
     11980 
     11981        if (($port_start = strpos($authority, ':')) !== false) 
     11982        { 
     11983            $port = substr($authority, $port_start + 1); 
     11984            $authority = substr($authority, 0, $port_start); 
     11985        } 
     11986        else 
     11987        { 
     11988            $port = null; 
     11989        } 
     11990 
     11991        return $this->set_userinfo($userinfo) && $this->set_host($authority) && $this->set_port($port); 
     11992    } 
     11993 
     11994    /** 
     11995     * Set the userinfo. 
     11996     * 
     11997     * @access public 
     11998     * @param string $userinfo 
     11999     * @return bool 
     12000     */ 
     12001    function set_userinfo($userinfo) 
     12002    { 
     12003        if ($userinfo === null || $userinfo === '') 
     12004        { 
     12005            $this->userinfo = null; 
     12006        } 
     12007        else 
     12008        { 
     12009            $this->userinfo = $this->replace_invalid_with_pct_encoding($userinfo, 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~!$&\'()*+,;=:'); 
     12010        } 
     12011        $this->valid[__FUNCTION__] = true; 
     12012        return true; 
     12013    } 
     12014 
     12015    /** 
     12016     * Set the host. Returns true on success, false on failure (if there are 
     12017     * any invalid characters). 
     12018     * 
     12019     * @access public 
     12020     * @param string $host 
     12021     * @return bool 
     12022     */ 
     12023    function set_host($host) 
     12024    { 
     12025        if ($host === null || $host === '') 
     12026        { 
     12027            $this->host = null; 
     12028            $this->valid[__FUNCTION__] = true; 
     12029            return true; 
     12030        } 
     12031        elseif ($host[0] === '[' && substr($host, -1) === ']') 
     12032        { 
     12033            if (Net_IPv6::checkIPv6(substr($host, 1, -1))) 
     12034            { 
     12035                $this->host = $host; 
     12036                $this->valid[__FUNCTION__] = true; 
     12037                return true; 
     12038            } 
     12039            else 
     12040            { 
     12041                $this->host = null; 
     12042                $this->valid[__FUNCTION__] = false; 
     12043                return false; 
     12044            } 
     12045        } 
     12046        else 
     12047        { 
     12048            $this->host = $this->replace_invalid_with_pct_encoding($host, 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~!$&\'()*+,;=', SIMPLEPIE_LOWERCASE); 
     12049            $this->valid[__FUNCTION__] = true; 
     12050            return true; 
     12051        } 
     12052    } 
     12053 
     12054    /** 
     12055     * Set the port. Returns true on success, false on failure (if there are 
     12056     * any invalid characters). 
     12057     * 
     12058     * @access public 
     12059     * @param string $port 
     12060     * @return bool 
     12061     */ 
     12062    function set_port($port) 
     12063    { 
     12064        if ($port === null || $port === '') 
     12065        { 
     12066            $this->port = null; 
     12067            $this->valid[__FUNCTION__] = true; 
     12068            return true; 
     12069        } 
     12070        elseif (strspn($port, '0123456789') === strlen($port)) 
     12071        { 
     12072            $this->port = (int) $port; 
     12073            $this->valid[__FUNCTION__] = true; 
     12074            return true; 
     12075        } 
     12076        else 
     12077        { 
     12078            $this->port = null; 
     12079            $this->valid[__FUNCTION__] = false; 
     12080            return false; 
     12081        } 
     12082    } 
     12083 
     12084    /** 
     12085     * Set the path. 
     12086     * 
     12087     * @access public 
     12088     * @param string $path 
     12089     * @return bool 
     12090     */ 
     12091    function set_path($path) 
     12092    { 
     12093        if ($path === null || $path === '') 
     12094        { 
     12095            $this->path = null; 
     12096            $this->valid[__FUNCTION__] = true; 
     12097            return true; 
     12098        } 
     12099        elseif (substr($path, 0, 2) === '//' && $this->userinfo === null && $this->host === null && $this->port === null) 
     12100        { 
     12101            $this->path = null; 
     12102            $this->valid[__FUNCTION__] = false; 
     12103            return false; 
     12104        } 
     12105        else 
     12106        { 
     12107            $this->path = $this->replace_invalid_with_pct_encoding($path, 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~!$&\'()*+,;=@/'); 
     12108            if ($this->scheme !== null) 
     12109            { 
     12110                $this->path = $this->remove_dot_segments($this->path); 
     12111            } 
     12112            $this->valid[__FUNCTION__] = true; 
     12113            return true; 
     12114        } 
     12115    } 
     12116 
     12117    /** 
     12118     * Set the query. 
     12119     * 
     12120     * @access public 
     12121     * @param string $query 
     12122     * @return bool 
     12123     */ 
     12124    function set_query($query) 
     12125    { 
     12126        if ($query === null || $query === '') 
     12127        { 
     12128            $this->query = null; 
     12129        } 
     12130        else 
     12131        { 
     12132            $this->query = $this->replace_invalid_with_pct_encoding($query, 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~!$&\'()*+,;=:@/?'); 
     12133        } 
     12134        $this->valid[__FUNCTION__] = true; 
     12135        return true; 
     12136    } 
     12137 
     12138    /** 
     12139     * Set the fragment. 
     12140     * 
     12141     * @access public 
     12142     * @param string $fragment 
     12143     * @return bool 
     12144     */ 
     12145    function set_fragment($fragment) 
     12146    { 
     12147        if ($fragment === null || $fragment === '') 
     12148        { 
     12149            $this->fragment = null; 
     12150        } 
     12151        else 
     12152        { 
     12153            $this->fragment = $this->replace_invalid_with_pct_encoding($fragment, 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~!$&\'()*+,;=:@/?'); 
     12154        } 
     12155        $this->valid[__FUNCTION__] = true; 
     12156        return true; 
     12157    } 
     12158 
     12159    /** 
     12160     * Get the complete IRI 
     12161     * 
     12162     * @access public 
     12163     * @return string 
     12164     */ 
     12165    function get_iri() 
     12166    { 
     12167        $iri = ''; 
     12168        if ($this->scheme !== null) 
     12169        { 
     12170            $iri .= $this->scheme . ':'; 
     12171        } 
     12172        if (($authority = $this->get_authority()) !== null) 
     12173        { 
     12174            $iri .= '//' . $authority; 
     12175        } 
     12176        if ($this->path !== null) 
     12177        { 
     12178            $iri .= $this->path; 
     12179        } 
     12180        if ($this->query !== null) 
     12181        { 
     12182            $iri .= '?' . $this->query; 
     12183        } 
     12184        if ($this->fragment !== null) 
     12185        { 
     12186            $iri .= '#' . $this->fragment; 
     12187        } 
     12188 
     12189        if ($iri !== '') 
     12190        { 
     12191            return $iri; 
     12192        } 
     12193        else 
     12194        { 
     12195            return null; 
     12196        } 
     12197    } 
     12198 
     12199    /** 
     12200     * Get the scheme 
     12201     * 
     12202     * @access public 
     12203     * @return string 
     12204     */ 
     12205    function get_scheme() 
     12206    { 
     12207        return $this->scheme; 
     12208    } 
     12209 
     12210    /** 
     12211     * Get the complete authority 
     12212     * 
     12213     * @access public 
     12214     * @return string 
     12215     */ 
     12216    function get_authority() 
     12217    { 
     12218        $authority = ''; 
     12219        if ($this->userinfo !== null) 
     12220        { 
     12221            $authority .= $this->userinfo . '@'; 
     12222        } 
     12223        if ($this->host !== null) 
     12224        { 
     12225            $authority .= $this->host; 
     12226        } 
     12227        if ($this->port !== null) 
     12228        { 
     12229            $authority .= ':' . $this->port; 
     12230        } 
     12231 
     12232        if ($authority !== '') 
     12233        { 
     12234            return $authority; 
     12235        } 
     12236        else 
     12237        { 
     12238            return null; 
     12239        } 
     12240    } 
     12241 
     12242    /** 
     12243     * Get the user information 
     12244     * 
     12245     * @access public 
     12246     * @return string 
     12247     */ 
     12248    function get_userinfo() 
     12249    { 
     12250        return $this->userinfo; 
     12251    } 
     12252 
     12253    /** 
     12254     * Get the host 
     12255     * 
     12256     * @access public 
     12257     * @return string 
     12258     */ 
     12259    function get_host() 
     12260    { 
     12261        return $this->host; 
     12262    } 
     12263 
     12264    /** 
     12265     * Get the port 
     12266     * 
     12267     * @access public 
     12268     * @return string 
     12269     */ 
     12270    function get_port() 
     12271    { 
     12272        return $this->port; 
     12273    } 
     12274 
     12275    /** 
     12276     * Get the path 
     12277     * 
     12278     * @access public 
     12279     * @return string 
     12280     */ 
     12281    function get_path() 
     12282    { 
     12283        return $this->path; 
     12284    } 
     12285 
     12286    /** 
     12287     * Get the query 
     12288     * 
     12289     * @access public 
     12290     * @return string 
     12291     */ 
     12292    function get_query() 
     12293    { 
     12294        return $this->query; 
     12295    } 
     12296 
     12297    /** 
     12298     * Get the fragment 
     12299     * 
     12300     * @access public 
     12301     * @return string 
     12302     */ 
     12303    function get_fragment() 
     12304    { 
     12305        return $this->fragment; 
     12306    } 
     12307} 
     12308 
     12309/** 
     12310 * Class to validate and to work with IPv6 addresses. 
     12311 * 
     12312 * @package SimplePie 
     12313 * @copyright 2003-2005 The PHP Group 
     12314 * @license http://www.opensource.org/licenses/bsd-license.php 
     12315 * @link http://pear.php.net/package/Net_IPv6 
     12316 * @author Alexander Merz <alexander.merz@web.de> 
     12317 * @author elfrink at introweb dot nl 
     12318 * @author Josh Peck <jmp at joshpeck dot org> 
     12319 * @author Geoffrey Sneddon <geoffers@gmail.com> 
     12320 */ 
     12321class SimplePie_Net_IPv6 
     12322{ 
     12323    /** 
     12324     * Removes a possible existing netmask specification of an IP address. 
     12325     * 
     12326     * @param string $ip the (compressed) IP as Hex representation 
     12327     * @return string the IP the without netmask 
     12328     * @since 1.1.0 
     12329     * @access public 
     12330     * @static 
     12331     */ 
     12332    function removeNetmaskSpec($ip) 
     12333    { 
     12334        if (strpos($ip, '/') !== false) 
     12335        { 
     12336            list($addr, $nm) = explode('/', $ip); 
     12337        } 
     12338        else 
     12339        { 
     12340            $addr = $ip; 
     12341        } 
     12342        return $addr; 
     12343    } 
     12344 
     12345    /** 
     12346     * Uncompresses an IPv6 address 
     12347     * 
     12348     * RFC 2373 allows you to compress zeros in an address to '::'. This 
     12349     * function expects an valid IPv6 address and expands the '::' to 
     12350     * the required zeros. 
     12351     * 
     12352     * Example:  FF01::101  ->  FF01:0:0:0:0:0:0:101 
     12353     *           ::1        ->  0:0:0:0:0:0:0:1 
     12354     * 
     12355     * @access public 
     12356     * @static 
     12357     * @param string $ip a valid IPv6-address (hex format) 
     12358     * @return string the uncompressed IPv6-address (hex format) 
     12359     */ 
     12360    function Uncompress($ip) 
     12361    { 
     12362        $uip = SimplePie_Net_IPv6::removeNetmaskSpec($ip); 
     12363        $c1 = -1; 
     12364        $c2 = -1; 
     12365        if (strpos($ip, '::') !== false) 
     12366        { 
     12367            list($ip1, $ip2) = explode('::', $ip); 
     12368            if ($ip1 === '') 
     12369            { 
     12370                $c1 = -1; 
     12371            } 
     12372            else 
     12373            { 
     12374                $pos = 0; 
     12375                if (($pos = substr_count($ip1, ':')) > 0) 
     12376                { 
     12377                    $c1 = $pos; 
     12378                } 
     12379                else 
     12380                { 
     12381                    $c1 = 0; 
     12382                } 
     12383            } 
     12384            if ($ip2 === '') 
     12385            { 
     12386                $c2 = -1; 
     12387            } 
     12388            else 
     12389            { 
     12390                $pos = 0; 
     12391                if (($pos = substr_count($ip2, ':')) > 0) 
     12392                { 
     12393                    $c2 = $pos; 
     12394                } 
     12395                else 
     12396                { 
     12397                    $c2 = 0; 
     12398                } 
     12399            } 
     12400            if (strstr($ip2, '.')) 
     12401            { 
     12402                $c2++; 
     12403            } 
     12404            // :: 
     12405            if ($c1 === -1 && $c2 === -1) 
     12406            { 
     12407                $uip = '0:0:0:0:0:0:0:0'; 
     12408            } 
     12409            // ::xxx 
     12410            else if ($c1 === -1) 
     12411            { 
     12412                $fill = str_repeat('0:', 7 - $c2); 
     12413                $uip =  str_replace('::', $fill, $uip); 
     12414            } 
     12415            // xxx:: 
     12416            else if ($c2 === -1) 
     12417            { 
     12418                $fill = str_repeat(':0', 7 - $c1); 
     12419                $uip =  str_replace('::', $fill, $uip); 
     12420            } 
     12421            // xxx::xxx 
     12422            else 
     12423            { 
     12424                $fill = str_repeat(':0:', 6 - $c2 - $c1); 
     12425                $uip =  str_replace('::', $fill, $uip); 
     12426                $uip =  str_replace('::', ':', $uip); 
     12427            } 
     12428        } 
     12429        return $uip; 
     12430    } 
     12431 
     12432    /** 
     12433     * Splits an IPv6 address into the IPv6 and a possible IPv4 part 
     12434     * 
     12435     * RFC 2373 allows you to note the last two parts of an IPv6 address as 
     12436     * an IPv4 compatible address 
     12437     * 
     12438     * Example:  0:0:0:0:0:0:13.1.68.3 
     12439     *           0:0:0:0:0:FFFF:129.144.52.38 
     12440     * 
     12441     * @access public 
     12442     * @static 
     12443     * @param string $ip a valid IPv6-address (hex format) 
     12444     * @return array [0] contains the IPv6 part, [1] the IPv4 part (hex format) 
     12445     */ 
     12446    function SplitV64($ip) 
     12447    { 
     12448        $ip = SimplePie_Net_IPv6::Uncompress($ip); 
     12449        if (strstr($ip, '.')) 
     12450        { 
     12451            $pos = strrpos($ip, ':'); 
     12452            $ip[$pos] = '_'; 
     12453            $ipPart = explode('_', $ip); 
     12454            return $ipPart; 
     12455        } 
     12456        else 
     12457        { 
     12458            return array($ip, ''); 
     12459        } 
     12460    } 
     12461 
     12462    /** 
     12463     * Checks an IPv6 address 
     12464     * 
     12465     * Checks if the given IP is IPv6-compatible 
     12466     * 
     12467     * @access public 
     12468     * @static 
     12469     * @param string $ip a valid IPv6-address 
     12470     * @return bool true if $ip is an IPv6 address 
     12471     */ 
     12472    function checkIPv6($ip) 
     12473    { 
     12474        $ipPart = SimplePie_Net_IPv6::SplitV64($ip); 
     12475        $count = 0; 
     12476        if (!empty($ipPart[0])) 
     12477        { 
     12478            $ipv6 = explode(':', $ipPart[0]); 
     12479            for ($i = 0; $i < count($ipv6); $i++) 
     12480            { 
     12481                $dec = hexdec($ipv6[$i]); 
     12482                $hex = strtoupper(preg_replace('/^[0]{1,3}(.*[0-9a-fA-F])$/', '\\1', $ipv6[$i])); 
     12483                if ($ipv6[$i] >= 0 && $dec <= 65535 && $hex === strtoupper(dechex($dec))) 
     12484                { 
     12485                    $count++; 
     12486                } 
     12487            } 
     12488            if ($count === 8) 
     12489            { 
     12490                return true; 
     12491            } 
     12492            elseif ($count === 6 && !empty($ipPart[1])) 
     12493            { 
     12494                $ipv4 = explode('.', $ipPart[1]); 
     12495                $count = 0; 
     12496                foreach ($ipv4 as $ipv4_part) 
     12497                { 
     12498                    if ($ipv4_part >= 0 && $ipv4_part <= 255 && preg_match('/^\d{1,3}$/', $ipv4_part)) 
     12499                    { 
     12500                        $count++; 
     12501                    } 
     12502                } 
     12503                if ($count === 4) 
     12504                { 
     12505                    return true; 
     12506                } 
     12507            } 
     12508            else 
     12509            { 
     12510                return false; 
     12511            } 
     12512 
     12513        } 
     12514        else 
     12515        { 
     12516            return false; 
    1121212517        } 
    1121312518    } 
     
    1277014075    } 
    1277114076 
    12772     function find($type = SIMPLEPIE_LOCATOR_ALL) 
     14077    function find($type = SIMPLEPIE_LOCATOR_ALL, &$working) 
    1277314078    { 
    1277414079        if ($this->is_feed($this->file)) 
     
    1279314098        if ($type & SIMPLEPIE_LOCATOR_AUTODISCOVERY && $working = $this->autodiscovery()) 
    1279414099        { 
    12795             return $working; 
     14100            return $working[0]; 
    1279614101        } 
    1279714102 
     
    1286614171        $links = array_merge(SimplePie_Misc::get_element('link', $this->file->body), SimplePie_Misc::get_element('a', $this->file->body), SimplePie_Misc::get_element('area', $this->file->body)); 
    1286714172        $done = array(); 
     14173        $feeds = array(); 
    1286814174        foreach ($links as $link) 
    1286914175        { 
    12870             if ($this->checked_feeds == $this->max_checked_feeds) 
     14176            if ($this->checked_feeds === $this->max_checked_feeds) 
    1287114177            { 
    1287214178                break; 
     
    1288514191                } 
    1288614192 
    12887                 if (!in_array($href, $done) && in_array('feed', $rel) || (in_array('alternate', $rel) && !empty($link['attribs']['type']['data']) && in_array(strtolower(SimplePie_Misc::parse_mime($link['attribs']['type']['data'])), array('application/rss+xml', 'application/atom+xml')))) 
     14193                if (!in_array($href, $done) && in_array('feed', $rel) || (in_array('alternate', $rel) && !empty($link['attribs']['type']['data']) && in_array(strtolower(SimplePie_Misc::parse_mime($link['attribs']['type']['data'])), array('application/rss+xml', 'application/atom+xml'))) && !isset($feeds[$href])) 
    1288814194                { 
    1288914195                    $this->checked_feeds++; 
    1289014196                    $feed =& new $this->file_class($href, $this->timeout, 5, null, $this->useragent); 
    12891                     if ($this->is_feed($feed)) 
     14197                    if ($feed->success && ($feed->method & SIMPLEPIE_FILE_SOURCE_REMOTE === 0 || ($feed->status_code === 200 || $feed->status_code > 206 && $feed->status_code < 300)) && $this->is_feed($feed)) 
    1289214198                    { 
    12893                         return $feed; 
     14199                        $feeds[$href] = $feed; 
    1289414200                    } 
    1289514201                } 
     
    1289714203            } 
    1289814204        } 
    12899         return null; 
     14205 
     14206        if (!empty($feeds)) 
     14207        { 
     14208            return array_values($feeds); 
     14209        } 
     14210        else { 
     14211            return null; 
     14212        } 
    1290014213    } 
    1290114214 
     
    1292214235                    $current = SimplePie_Misc::parse_url($this->file->url); 
    1292314236 
    12924                     if ($parsed['authority'] === '' || $parsed['authority'] == $current['authority']) 
     14237                    if ($parsed['authority'] === '' || $parsed['authority'] === $current['authority']) 
    1292514238                    { 
    1292614239                        $this->local[] = $href; 
     
    1294614259        foreach ($array as $key => $value) 
    1294714260        { 
    12948             if ($this->checked_feeds == $this->max_checked_feeds) 
     14261            if ($this->checked_feeds === $this->max_checked_feeds) 
    1294914262            { 
    1295014263                break; 
     
    1295414267                $this->checked_feeds++; 
    1295514268                $feed =& new $this->file_class($value, $this->timeout, 5, null, $this->useragent); 
    12956                 if ($this->is_feed($feed)) 
     14269                if ($feed->success && ($feed->method & SIMPLEPIE_FILE_SOURCE_REMOTE === 0 || ($feed->status_code === 200 || $feed->status_code > 206 && $feed->status_code < 300)) && $this->is_feed($feed)) 
    1295714270                { 
    1295814271                    return $feed; 
     
    1297114284        foreach ($array as $key => $value) 
    1297214285        { 
    12973             if ($this->checked_feeds == $this->max_checked_feeds) 
     14286            if ($this->checked_feeds === $this->max_checked_feeds) 
    1297414287            { 
    1297514288                break; 
     
    1297914292                $this->checked_feeds++; 
    1298014293                $feed =& new $this->file_class($value, $this->timeout, 5, null, $this->useragent); 
    12981                 if ($this->is_feed($feed)) 
     14294                if ($feed->success && ($feed->method & SIMPLEPIE_FILE_SOURCE_REMOTE === 0 || ($feed->status_code === 200 || $feed->status_code > 206 && $feed->status_code < 300)) && $this->is_feed($feed)) 
    1298214295                { 
    1298314296                    return $feed; 
     
    1300114314    var $current_byte; 
    1300214315    var $separator = ' '; 
    13003     var $feed = false; 
    1300414316    var $namespace = array(''); 
    1300514317    var $element = array(''); 
     
    1301514327    { 
    1301614328        // Use UTF-8 if we get passed US-ASCII, as every US-ASCII character is a UTF-8 character 
    13017         if (strtoupper($encoding) == 'US-ASCII') 
     14329        if (strtoupper($encoding) === 'US-ASCII') 
    1301814330        { 
    1301914331            $this->encoding = 'UTF-8'; 
     
    1306614378        } 
    1306714379 
    13068         // Work around libxml bug 
    13069         $data = str_replace('&lt;', '&#60;', $data); 
    13070         $data = str_replace('&gt;', '&#62;', $data); 
    13071         $data = str_replace('&amp;', '&#38;', $data); 
    13072         $data = str_replace('&apos;', '&#39;', $data); 
    13073         $data = str_replace('&quot;', '&#34;', $data); 
    13074  
    1307514380        $return = true; 
    1307614381 
     14382        static $xml_is_sane = null; 
     14383        if ($xml_is_sane === null) 
     14384        { 
     14385            $parser_check = xml_parser_create(); 
     14386            xml_parse_into_struct($parser_check, '<foo>&amp;</foo>', $values); 
     14387            xml_parser_free($parser_check); 
     14388            $xml_is_sane = isset($values[0]['value']); 
     14389        } 
     14390 
    1307714391        // Create the parser 
    13078         $xml = xml_parser_create_ns($this->encoding, $this->separator); 
    13079         xml_parser_set_option($xml, XML_OPTION_SKIP_WHITE, 1); 
    13080         xml_parser_set_option($xml, XML_OPTION_CASE_FOLDING, 0); 
    13081         xml_set_object($xml, $this); 
    13082         xml_set_character_data_handler($xml, 'cdata'); 
    13083         xml_set_element_handler($xml, 'tag_open', 'tag_close'); 
    13084  
    13085         // Parse! 
    13086         if (!xml_parse($xml, $data, true)) 
    13087         { 
    13088             $this->error_code = xml_get_error_code($xml); 
    13089             $this->error_string = xml_error_string($this->error_code); 
    13090             $return = false; 
    13091         } 
    13092         $this->current_line = xml_get_current_line_number($xml); 
    13093         $this->current_column = xml_get_current_column_number($xml); 
    13094         $this->current_byte = xml_get_current_byte_index($xml); 
    13095         xml_parser_free($xml); 
    13096         return $return; 
     14392        if ($xml_is_sane) 
     14393        { 
     14394            $xml = xml_parser_create_ns($this->encoding, $this->separator); 
     14395            xml_parser_set_option($xml, XML_OPTION_SKIP_WHITE, 1); 
     14396            xml_parser_set_option($xml, XML_OPTION_CASE_FOLDING, 0); 
     14397            xml_set_object($xml, $this); 
     14398            xml_set_character_data_handler($xml, 'cdata'); 
     14399            xml_set_element_handler($xml, 'tag_open', 'tag_close'); 
     14400 
     14401            // Parse! 
     14402            if (!xml_parse($xml, $data, true)) 
     14403            { 
     14404                $this->error_code = xml_get_error_code($xml); 
     14405                $this->error_string = xml_error_string($this->error_code); 
     14406                $return = false; 
     14407            } 
     14408            $this->current_line = xml_get_current_line_number($xml); 
     14409            $this->current_column = xml_get_current_column_number($xml); 
     14410            $this->current_byte = xml_get_current_byte_index($xml); 
     14411            xml_parser_free($xml); 
     14412            return $return; 
     14413        } 
     14414        else 
     14415        { 
     14416            libxml_clear_errors(); 
     14417            $xml =& new XMLReader(); 
     14418            $xml->xml($data); 
     14419            while (@$xml->read()) 
     14420            { 
     14421                switch ($xml->nodeType) 
     14422                { 
     14423 
     14424                    case constant('XMLReader::END_ELEMENT'): 
     14425                        if ($xml->namespaceURI !== '') 
     14426                        { 
     14427                            $tagName = "{$xml->namespaceURI}{$this->separator}{$xml->localName}"; 
     14428                        } 
     14429                        else 
     14430                        { 
     14431                            $tagName = $xml->localName; 
     14432                        } 
     14433                        $this->tag_close(null, $tagName); 
     14434                        break; 
     14435                    case constant('XMLReader::ELEMENT'): 
     14436                        $empty = $xml->isEmptyElement; 
     14437                        if ($xml->namespaceURI !== '') 
     14438                        { 
     14439                            $tagName = "{$xml->namespaceURI}{$this->separator}{$xml->localName}"; 
     14440                        } 
     14441                        else 
     14442                        { 
     14443                            $tagName = $xml->localName; 
     14444                        } 
     14445                        $attributes = array(); 
     14446                        while ($xml->moveToNextAttribute()) 
     14447                        { 
     14448                            if ($xml->namespaceURI !== '') 
     14449                            { 
     14450                                $attrName = "{$xml->namespaceURI}{$this->separator}{$xml->localName}"; 
     14451                            } 
     14452                            else 
     14453                            { 
     14454                                $attrName = $xml->localName; 
     14455                            } 
     14456                            $attributes[$attrName] = $xml->value; 
     14457                        } 
     14458                        $this->tag_open(null, $tagName, $attributes); 
     14459                        if ($empty) 
     14460                        { 
     14461                            $this->tag_close(null, $tagName); 
     14462                        } 
     14463                        break; 
     14464                    case constant('XMLReader::TEXT'): 
     14465 
     14466                    case constant('XMLReader::CDATA'): 
     14467                        $this->cdata(null, $xml->value); 
     14468                        break; 
     14469                } 
     14470            } 
     14471            if ($error = libxml_get_last_error()) 
     14472            { 
     14473                $this->error_code = $error->code; 
     14474                $this->error_string = $error->message; 
     14475                $this->current_line = $error->line; 
     14476                $this->current_column = $error->column; 
     14477                return false; 
     14478            } 
     14479            else 
     14480            { 
     14481                return true; 
     14482            } 
     14483        } 
    1309714484    } 
    1309814485 
     
    1312914516    function tag_open($parser, $tag, $attributes) 
    1313014517    { 
    13131         if ($this->feed === 0) 
    13132         { 
    13133             return; 
    13134         } 
    13135         elseif ($this->feed == false) 
    13136         { 
    13137             if (in_array($tag, array( 
    13138                 SIMPLEPIE_NAMESPACE_ATOM_10 . $this->separator . 'feed', 
    13139                 SIMPLEPIE_NAMESPACE_ATOM_03 . $this->separator . 'feed', 
    13140                 'rss', 
    13141                 SIMPLEPIE_NAMESPACE_RDF . $this->separator . 'RDF' 
    13142             ))) 
    13143             { 
    13144                     $this->feed = 1; 
    13145             } 
    13146         } 
    13147         else 
    13148         { 
    13149             $this->feed++; 
    13150         } 
    13151  
    1315214518        list($this->namespace[], $this->element[]) = $this->split_ns($tag); 
    1315314519 
     
    1318214548        { 
    1318314549            $this->current_xhtml_construct++; 
    13184             if (end($this->namespace) == SIMPLEPIE_NAMESPACE_XHTML) 
     14550            if (end($this->namespace) === SIMPLEPIE_NAMESPACE_XHTML) 
    1318514551            { 
    1318614552                $this->data['data'] .= '<' . end($this->element); 
     
    1320014566            $this->data =& $this->data['child'][end($this->namespace)][end($this->element)][]; 
    1320114567            $this->data = array('data' => '', 'attribs' => $attribs, 'xml_base' => end($this->xml_base), 'xml_base_explicit' => end($this->xml_base_explicit), 'xml_lang' => end($this->xml_lang)); 
    13202             if ((end($this->namespace) == SIMPLEPIE_NAMESPACE_ATOM_03 && in_array(end($this->element), array('title', 'tagline', 'copyright', 'info', 'summary', 'content')) && isset($attribs['']['mode']) && $attribs['']['mode'] == 'xml') 
    13203             || (end($this->namespace) == SIMPLEPIE_NAMESPACE_ATOM_10 && in_array(end($this->element), array('rights', 'subtitle', 'summary', 'info', 'title', 'content')) && isset($attribs['']['type']) && $attribs['']['type'] == 'xhtml')) 
     14568            if ((end($this->namespace) === SIMPLEPIE_NAMESPACE_ATOM_03 && in_array(end($this->element), array('title', 'tagline', 'copyright', 'info', 'summary', 'content')) && isset($attribs['']['mode']) && $attribs['']['mode'] === 'xml') 
     14569            || (end($this->namespace) === SIMPLEPIE_NAMESPACE_ATOM_10 && in_array(end($this->element), array('rights', 'subtitle', 'summary', 'info', 'title', 'content')) && isset($attribs['']['type']) && $attribs['']['type'] === 'xhtml')) 
    1320414570            { 
    1320514571                $this->current_xhtml_construct = 0; 
     
    1321414580            $this->data['data'] .= htmlspecialchars($cdata, ENT_QUOTES, $this->encoding); 
    1321514581        } 
    13216         elseif ($this->feed > 1) 
     14582        else 
    1321714583        { 
    1321814584            $this->data['data'] .= $cdata; 
     
    1322214588    function tag_close($parser, $tag) 
    1322314589    { 
    13224         if (!$this->feed) 
    13225         { 
    13226             return; 
    13227         } 
    13228  
    1322914590        if ($this->current_xhtml_construct >= 0) 
    1323014591        { 
    1323114592            $this->current_xhtml_construct--; 
    13232             if (end($this->namespace) == SIMPLEPIE_NAMESPACE_XHTML && !in_array(end($this->element), array('area', 'base', 'basefont', 'br', 'col', 'frame', 'hr', 'img', 'input', 'isindex', 'link', 'meta', 'param'))) 
     14593            if (end($this->namespace) === SIMPLEPIE_NAMESPACE_XHTML && !in_array(end($this->element), array('area', 'base', 'basefont', 'br', 'col', 'frame', 'hr', 'img', 'input', 'isindex', 'link', 'meta', 'param'))) 
    1323314594            { 
    1323414595                $this->data['data'] .= '</' . end($this->element) . '>'; 
    1323514596            } 
    1323614597        } 
    13237         if ($this->current_xhtml_construct == -1) 
    13238         { 
    13239             $this->data =& $this->datas[$this->feed]; 
     14598        if ($this->current_xhtml_construct === -1) 
     14599        { 
     14600            $this->data =& $this->datas[count($this->datas) - 1]; 
    1324014601            array_pop($this->datas); 
    1324114602        } 
     
    1324614607        array_pop($this->xml_base_explicit); 
    1324714608        array_pop($this->xml_lang); 
    13248         $this->feed--; 
    1324914609    } 
    1325014610 
     
    1354414904                                $headers = $file->headers; 
    1354514905 
    13546                                 if ($file->success && ($file->status_code == 200 || ($file->status_code > 206 && $file->status_code < 300))) 
     14906                                if ($file->success && ($file->method & SIMPLEPIE_FILE_SOURCE_REMOTE === 0 || ($file->status_code === 200 || $file->status_code > 206 && $file->status_code < 300))) 
    1354714907                                { 
    1354814908                                    if ($cache->save(array('headers' => $file->headers, 'body' => $file->body))) 
     
    1355314913                                    else 
    1355414914                                    { 
    13555                                         trigger_error("$cache->name is not writeable", E_USER_WARNING); 
     14915                                        trigger_error("$this->cache_location is not writeable", E_USER_WARNING); 
    1355614916                                    } 
    1355714917                                } 
     
    1357514935            } 
    1357614936 
    13577             if ($this->output_encoding != 'UTF-8') 
     14937            if ($this->output_encoding !== 'UTF-8') 
    1357814938            { 
    1357914939                $data = SimplePie_Misc::change_encoding($data, 'UTF-8', $this->output_encoding); 
Note: See TracChangeset for help on using the changeset viewer.