Make WordPress Core


Ignore:
Timestamp:
09/15/2009 04:33:59 PM (17 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.