Make WordPress Core

Changeset 19890


Ignore:
Timestamp:
02/09/2012 08:15:22 PM (15 years ago)
Author:
ryan
Message:

Upgrade SimplePie to 1.2.1. Props nacin. fixes #18309

File:
1 edited

Legend:

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

    r16699 r19890  
    11<?php
    2 if ( !class_exists( 'SimplePie' ) ) :
     2if ( ! class_exists( 'SimplePie' ) ) :
    33/**
    44 * SimplePie
     
    77 * Takes the hard work out of managing a complete RSS/Atom solution.
    88 *
    9  * Copyright (c) 2004-2009, Ryan Parman and Geoffrey Sneddon
     9 * Copyright (c) 2004-2011, Ryan Parman, Geoffrey Sneddon, Ryan McCue, and contributors
    1010 * All rights reserved.
    1111 *
     
    3535 *
    3636 * @package SimplePie
    37  * @version 1.2
    38  * @copyright 2004-2009 Ryan Parman, Geoffrey Sneddon
     37 * @version 1.2.1
     38 * @copyright 2004-2011 Ryan Parman, Geoffrey Sneddon, Ryan McCue
    3939 * @author Ryan Parman
    4040 * @author Geoffrey Sneddon
     41 * @author Ryan McCue
    4142 * @link http://simplepie.org/ SimplePie
    4243 * @link http://simplepie.org/support/ Please submit all bug reports and feature requests to the SimplePie forums
     
    5354 * SimplePie Version
    5455 */
    55 define('SIMPLEPIE_VERSION', '1.2');
     56define('SIMPLEPIE_VERSION', '1.2.1');
    5657
    5758/**
    5859 * SimplePie Build
    5960 */
    60 define('SIMPLEPIE_BUILD', '20090627192103');
     61define('SIMPLEPIE_BUILD', '20111015034325');
    6162
    6263/**
     
    16731674                                                                if (!$cache->save($this))
    16741675                                                                {
    1675                                                                         trigger_error("$this->cache_location is not writeable", E_USER_WARNING);
     1676                                                                        trigger_error("$this->cache_location is not writeable. Make sure you've set the correct relative or absolute path, and that the location is server-writable.", E_USER_WARNING);
    16761677                                                                }
    16771678                                                                $cache = call_user_func(array($this->cache_class, 'create'), $this->cache_location, call_user_func($this->cache_name_function, $file->url), 'spc');
     
    16811682                                                else
    16821683                                                {
    1683                                                         $this->error = "A feed could not be found at $this->feed_url";
     1684                                                        $this->error = "A feed could not be found at $this->feed_url. A feed with an invalid mime type may fall victim to this error, or " . SIMPLEPIE_NAME . " was unable to auto-discover it.. Use force_feed() if you are certain this URL is a real feed.";
    16841685                                                        SimplePie_Misc::error($this->error, E_USER_NOTICE, __FILE__, __LINE__);
    16851686                                                        return false;
     
    17781779                                                        if ($cache && !$cache->save($this))
    17791780                                                        {
    1780                                                                 trigger_error("$cache->name is not writeable", E_USER_WARNING);
     1781                                                                trigger_error("$this->cache_location is not writeable. Make sure you've set the correct relative or absolute path, and that the location is server-writable.", E_USER_WARNING);
    17811782                                                        }
    17821783                                                        return true;
     
    17841785                                                else
    17851786                                                {
    1786                                                         $this->error = "A feed could not be found at $this->feed_url";
     1787                                                        $this->error = "A feed could not be found at $this->feed_url. This does not appear to be a valid RSS or Atom feed.";
    17871788                                                        SimplePie_Misc::error($this->error, E_USER_NOTICE, __FILE__, __LINE__);
    17881789                                                        return false;
     
    17911792                                }
    17921793                        }
    1793                         if(isset($parser))
     1794                        if (isset($parser))
    17941795                        {
    17951796                                // We have an error, just set SimplePie_Misc::error to it and quit
    1796                                 $this->error = sprintf('XML error: %s at line %d, column %d', $parser->get_error_string(), $parser->get_current_line(), $parser->get_current_column());
     1797                                $this->error = sprintf('This XML document is invalid, likely due to invalid characters. XML error: %s at line %d, column %d', $parser->get_error_string(), $parser->get_current_line(), $parser->get_current_column());
    17971798                        }
    17981799                        else
    17991800                        {
    1800                                 $this->error = 'The data could not be converted to UTF-8';
     1801                                $this->error = 'The data could not be converted to UTF-8. You MUST have either the iconv or mbstring extension installed. Upgrading to PHP 5.x (which includes iconv) is highly recommended.';
    18011802                        }
    18021803                        SimplePie_Misc::error($this->error, E_USER_NOTICE, __FILE__, __LINE__);
     
    18321833
    18331834        /**
    1834          * Return the error message for the occurred error
     1835         * Return the error message for the occured error
    18351836         *
    18361837         * @access public
     
    19851986                                                        else
    19861987                                                        {
    1987                                                                 trigger_error("$cache->name is not writeable", E_USER_WARNING);
     1988                                                                trigger_error("$cache->name is not writeable. Make sure you've set the correct relative or absolute path, and that the location is server-writable.", E_USER_WARNING);
    19881989                                                                return $this->sanitize($favicon, SIMPLEPIE_CONSTRUCT_IRI);
    19891990                                                        }
     
    27752776        function get_latitude()
    27762777        {
     2778               
    27772779                if ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_W3C_BASIC_GEO, 'lat'))
    27782780                {
    27792781                        return (float) $return[0]['data'];
    27802782                }
    2781                 elseif (($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_GEORSS, 'point')) && preg_match('/^((?:-)?[0-9]+(?:\.[0-9]+)) ((?:-)?[0-9]+(?:\.[0-9]+))$/', $return[0]['data'], $match))
     2783                elseif (($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_GEORSS, 'point')) && preg_match('/^((?:-)?[0-9]+(?:\.[0-9]+)) ((?:-)?[0-9]+(?:\.[0-9]+))$/', trim($return[0]['data']), $match))
    27822784                {
    27832785                        return (float) $match[1];
     
    27992801                        return (float) $return[0]['data'];
    28002802                }
    2801                 elseif (($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_GEORSS, 'point')) && preg_match('/^((?:-)?[0-9]+(?:\.[0-9]+)) ((?:-)?[0-9]+(?:\.[0-9]+))$/', $return[0]['data'], $match))
     2803                elseif (($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_GEORSS, 'point')) && preg_match('/^((?:-)?[0-9]+(?:\.[0-9]+)) ((?:-)?[0-9]+(?:\.[0-9]+))$/', trim($return[0]['data']), $match))
    28022804                {
    28032805                        return (float) $match[2];
     
    32793281                        return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
    32803282                }
     3283                elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'description'))
     3284                {
     3285                        return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_HTML);
     3286                }
     3287
    32813288                elseif (!$description_only)
    32823289                {
     
    36433650                        return $this->sanitize($this->get_date(''), SIMPLEPIE_CONSTRUCT_TEXT);
    36443651                }
    3645                 elseif (($date = $this->get_date('U')) !== null)
     3652                elseif (($date = $this->get_date('U')) !== null && $date !== false)
    36463653                {
    36473654                        return strftime($date_format, $date);
     
    44294436                        foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'group') as $group)
    44304437                        {
    4431                                 // If we have media:content tags, loop through them.
    4432                                 foreach ((array) $group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['content'] as $content)
    4433                                 {
    4434                                         if (isset($content['attribs']['']['url']))
     4438                                if(isset($group['child']) && isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['content']))
     4439                                {
     4440                                        // If we have media:content tags, loop through them.
     4441                                        foreach ((array) $group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['content'] as $content)
     4442                                        {
     4443                                                if (isset($content['attribs']['']['url']))
     4444                                                {
     4445                                                        // Attributes
     4446                                                        $bitrate = null;
     4447                                                        $channels = null;
     4448                                                        $duration = null;
     4449                                                        $expression = null;
     4450                                                        $framerate = null;
     4451                                                        $height = null;
     4452                                                        $javascript = null;
     4453                                                        $lang = null;
     4454                                                        $length = null;
     4455                                                        $medium = null;
     4456                                                        $samplingrate = null;
     4457                                                        $type = null;
     4458                                                        $url = null;
     4459                                                        $width = null;
     4460
     4461                                                        // Elements
     4462                                                        $captions = null;
     4463                                                        $categories = null;
     4464                                                        $copyrights = null;
     4465                                                        $credits = null;
     4466                                                        $description = null;
     4467                                                        $hashes = null;
     4468                                                        $keywords = null;
     4469                                                        $player = null;
     4470                                                        $ratings = null;
     4471                                                        $restrictions = null;
     4472                                                        $thumbnails = null;
     4473                                                        $title = null;
     4474
     4475                                                        // Start checking the attributes of media:content
     4476                                                        if (isset($content['attribs']['']['bitrate']))
     4477                                                        {
     4478                                                                $bitrate = $this->sanitize($content['attribs']['']['bitrate'], SIMPLEPIE_CONSTRUCT_TEXT);
     4479                                                        }
     4480                                                        if (isset($content['attribs']['']['channels']))
     4481                                                        {
     4482                                                                $channels = $this->sanitize($content['attribs']['']['channels'], SIMPLEPIE_CONSTRUCT_TEXT);
     4483                                                        }
     4484                                                        if (isset($content['attribs']['']['duration']))
     4485                                                        {
     4486                                                                $duration = $this->sanitize($content['attribs']['']['duration'], SIMPLEPIE_CONSTRUCT_TEXT);
     4487                                                        }
     4488                                                        else
     4489                                                        {
     4490                                                                $duration = $duration_parent;
     4491                                                        }
     4492                                                        if (isset($content['attribs']['']['expression']))
     4493                                                        {
     4494                                                                $expression = $this->sanitize($content['attribs']['']['expression'], SIMPLEPIE_CONSTRUCT_TEXT);
     4495                                                        }
     4496                                                        if (isset($content['attribs']['']['framerate']))
     4497                                                        {
     4498                                                                $framerate = $this->sanitize($content['attribs']['']['framerate'], SIMPLEPIE_CONSTRUCT_TEXT);
     4499                                                        }
     4500                                                        if (isset($content['attribs']['']['height']))
     4501                                                        {
     4502                                                                $height = $this->sanitize($content['attribs']['']['height'], SIMPLEPIE_CONSTRUCT_TEXT);
     4503                                                        }
     4504                                                        if (isset($content['attribs']['']['lang']))
     4505                                                        {
     4506                                                                $lang = $this->sanitize($content['attribs']['']['lang'], SIMPLEPIE_CONSTRUCT_TEXT);
     4507                                                        }
     4508                                                        if (isset($content['attribs']['']['fileSize']))
     4509                                                        {
     4510                                                                $length = ceil($content['attribs']['']['fileSize']);
     4511                                                        }
     4512                                                        if (isset($content['attribs']['']['medium']))
     4513                                                        {
     4514                                                                $medium = $this->sanitize($content['attribs']['']['medium'], SIMPLEPIE_CONSTRUCT_TEXT);
     4515                                                        }
     4516                                                        if (isset($content['attribs']['']['samplingrate']))
     4517                                                        {
     4518                                                                $samplingrate = $this->sanitize($content['attribs']['']['samplingrate'], SIMPLEPIE_CONSTRUCT_TEXT);
     4519                                                        }
     4520                                                        if (isset($content['attribs']['']['type']))
     4521                                                        {
     4522                                                                $type = $this->sanitize($content['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT);
     4523                                                        }
     4524                                                        if (isset($content['attribs']['']['width']))
     4525                                                        {
     4526                                                                $width = $this->sanitize($content['attribs']['']['width'], SIMPLEPIE_CONSTRUCT_TEXT);
     4527                                                        }
     4528                                                        $url = $this->sanitize($content['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI);
     4529
     4530                                                        // Checking the other optional media: elements. Priority: media:content, media:group, item, channel
     4531
     4532                                                        // CAPTIONS
     4533                                                        if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['text']))
     4534                                                        {
     4535                                                                foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['text'] as $caption)
     4536                                                                {
     4537                                                                        $caption_type = null;
     4538                                                                        $caption_lang = null;
     4539                                                                        $caption_startTime = null;
     4540                                                                        $caption_endTime = null;
     4541                                                                        $caption_text = null;
     4542                                                                        if (isset($caption['attribs']['']['type']))
     4543                                                                        {
     4544                                                                                $caption_type = $this->sanitize($caption['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT);
     4545                                                                        }
     4546                                                                        if (isset($caption['attribs']['']['lang']))
     4547                                                                        {
     4548                                                                                $caption_lang = $this->sanitize($caption['attribs']['']['lang'], SIMPLEPIE_CONSTRUCT_TEXT);
     4549                                                                        }
     4550                                                                        if (isset($caption['attribs']['']['start']))
     4551                                                                        {
     4552                                                                                $caption_startTime = $this->sanitize($caption['attribs']['']['start'], SIMPLEPIE_CONSTRUCT_TEXT);
     4553                                                                        }
     4554                                                                        if (isset($caption['attribs']['']['end']))
     4555                                                                        {
     4556                                                                                $caption_endTime = $this->sanitize($caption['attribs']['']['end'], SIMPLEPIE_CONSTRUCT_TEXT);
     4557                                                                        }
     4558                                                                        if (isset($caption['data']))
     4559                                                                        {
     4560                                                                                $caption_text = $this->sanitize($caption['data'], SIMPLEPIE_CONSTRUCT_TEXT);
     4561                                                                        }
     4562                                                                        $captions[] =& new $this->feed->caption_class($caption_type, $caption_lang, $caption_startTime, $caption_endTime, $caption_text);
     4563                                                                }
     4564                                                                if (is_array($captions))
     4565                                                                {
     4566                                                                        $captions = array_values(SimplePie_Misc::array_unique($captions));
     4567                                                                }
     4568                                                        }
     4569                                                        elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['text']))
     4570                                                        {
     4571                                                                foreach ($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['text'] as $caption)
     4572                                                                {
     4573                                                                        $caption_type = null;
     4574                                                                        $caption_lang = null;
     4575                                                                        $caption_startTime = null;
     4576                                                                        $caption_endTime = null;
     4577                                                                        $caption_text = null;
     4578                                                                        if (isset($caption['attribs']['']['type']))
     4579                                                                        {
     4580                                                                                $caption_type = $this->sanitize($caption['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT);
     4581                                                                        }
     4582                                                                        if (isset($caption['attribs']['']['lang']))
     4583                                                                        {
     4584                                                                                $caption_lang = $this->sanitize($caption['attribs']['']['lang'], SIMPLEPIE_CONSTRUCT_TEXT);
     4585                                                                        }
     4586                                                                        if (isset($caption['attribs']['']['start']))
     4587                                                                        {
     4588                                                                                $caption_startTime = $this->sanitize($caption['attribs']['']['start'], SIMPLEPIE_CONSTRUCT_TEXT);
     4589                                                                        }
     4590                                                                        if (isset($caption['attribs']['']['end']))
     4591                                                                        {
     4592                                                                                $caption_endTime = $this->sanitize($caption['attribs']['']['end'], SIMPLEPIE_CONSTRUCT_TEXT);
     4593                                                                        }
     4594                                                                        if (isset($caption['data']))
     4595                                                                        {
     4596                                                                                $caption_text = $this->sanitize($caption['data'], SIMPLEPIE_CONSTRUCT_TEXT);
     4597                                                                        }
     4598                                                                        $captions[] =& new $this->feed->caption_class($caption_type, $caption_lang, $caption_startTime, $caption_endTime, $caption_text);
     4599                                                                }
     4600                                                                if (is_array($captions))
     4601                                                                {
     4602                                                                        $captions = array_values(SimplePie_Misc::array_unique($captions));
     4603                                                                }
     4604                                                        }
     4605                                                        else
     4606                                                        {
     4607                                                                $captions = $captions_parent;
     4608                                                        }
     4609
     4610                                                        // CATEGORIES
     4611                                                        if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['category']))
     4612                                                        {
     4613                                                                foreach ((array) $content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['category'] as $category)
     4614                                                                {
     4615                                                                        $term = null;
     4616                                                                        $scheme = null;
     4617                                                                        $label = null;
     4618                                                                        if (isset($category['data']))
     4619                                                                        {
     4620                                                                                $term = $this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT);
     4621                                                                        }
     4622                                                                        if (isset($category['attribs']['']['scheme']))
     4623                                                                        {
     4624                                                                                $scheme = $this->sanitize($category['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT);
     4625                                                                        }
     4626                                                                        else
     4627                                                                        {
     4628                                                                                $scheme = 'http://search.yahoo.com/mrss/category_schema';
     4629                                                                        }
     4630                                                                        if (isset($category['attribs']['']['label']))
     4631                                                                        {
     4632                                                                                $label = $this->sanitize($category['attribs']['']['label'], SIMPLEPIE_CONSTRUCT_TEXT);
     4633                                                                        }
     4634                                                                        $categories[] =& new $this->feed->category_class($term, $scheme, $label);
     4635                                                                }
     4636                                                        }
     4637                                                        if (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['category']))
     4638                                                        {
     4639                                                                foreach ((array) $group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['category'] as $category)
     4640                                                                {
     4641                                                                        $term = null;
     4642                                                                        $scheme = null;
     4643                                                                        $label = null;
     4644                                                                        if (isset($category['data']))
     4645                                                                        {
     4646                                                                                $term = $this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT);
     4647                                                                        }
     4648                                                                        if (isset($category['attribs']['']['scheme']))
     4649                                                                        {
     4650                                                                                $scheme = $this->sanitize($category['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT);
     4651                                                                        }
     4652                                                                        else
     4653                                                                        {
     4654                                                                                $scheme = 'http://search.yahoo.com/mrss/category_schema';
     4655                                                                        }
     4656                                                                        if (isset($category['attribs']['']['label']))
     4657                                                                        {
     4658                                                                                $label = $this->sanitize($category['attribs']['']['label'], SIMPLEPIE_CONSTRUCT_TEXT);
     4659                                                                        }
     4660                                                                        $categories[] =& new $this->feed->category_class($term, $scheme, $label);
     4661                                                                }
     4662                                                        }
     4663                                                        if (is_array($categories) && is_array($categories_parent))
     4664                                                        {
     4665                                                                $categories = array_values(SimplePie_Misc::array_unique(array_merge($categories, $categories_parent)));
     4666                                                        }
     4667                                                        elseif (is_array($categories))
     4668                                                        {
     4669                                                                $categories = array_values(SimplePie_Misc::array_unique($categories));
     4670                                                        }
     4671                                                        elseif (is_array($categories_parent))
     4672                                                        {
     4673                                                                $categories = array_values(SimplePie_Misc::array_unique($categories_parent));
     4674                                                        }
     4675
     4676                                                        // COPYRIGHTS
     4677                                                        if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright']))
     4678                                                        {
     4679                                                                $copyright_url = null;
     4680                                                                $copyright_label = null;
     4681                                                                if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['attribs']['']['url']))
     4682                                                                {
     4683                                                                        $copyright_url = $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_TEXT);
     4684                                                                }
     4685                                                                if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['data']))
     4686                                                                {
     4687                                                                        $copyright_label = $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
     4688                                                                }
     4689                                                                $copyrights =& new $this->feed->copyright_class($copyright_url, $copyright_label);
     4690                                                        }
     4691                                                        elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright']))
     4692                                                        {
     4693                                                                $copyright_url = null;
     4694                                                                $copyright_label = null;
     4695                                                                if (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['attribs']['']['url']))
     4696                                                                {
     4697                                                                        $copyright_url = $this->sanitize($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_TEXT);
     4698                                                                }
     4699                                                                if (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['data']))
     4700                                                                {
     4701                                                                        $copyright_label = $this->sanitize($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
     4702                                                                }
     4703                                                                $copyrights =& new $this->feed->copyright_class($copyright_url, $copyright_label);
     4704                                                        }
     4705                                                        else
     4706                                                        {
     4707                                                                $copyrights = $copyrights_parent;
     4708                                                        }
     4709
     4710                                                        // CREDITS
     4711                                                        if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['credit']))
     4712                                                        {
     4713                                                                foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['credit'] as $credit)
     4714                                                                {
     4715                                                                        $credit_role = null;
     4716                                                                        $credit_scheme = null;
     4717                                                                        $credit_name = null;
     4718                                                                        if (isset($credit['attribs']['']['role']))
     4719                                                                        {
     4720                                                                                $credit_role = $this->sanitize($credit['attribs']['']['role'], SIMPLEPIE_CONSTRUCT_TEXT);
     4721                                                                        }
     4722                                                                        if (isset($credit['attribs']['']['scheme']))
     4723                                                                        {
     4724                                                                                $credit_scheme = $this->sanitize($credit['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT);
     4725                                                                        }
     4726                                                                        else
     4727                                                                        {
     4728                                                                                $credit_scheme = 'urn:ebu';
     4729                                                                        }
     4730                                                                        if (isset($credit['data']))
     4731                                                                        {
     4732                                                                                $credit_name = $this->sanitize($credit['data'], SIMPLEPIE_CONSTRUCT_TEXT);
     4733                                                                        }
     4734                                                                        $credits[] =& new $this->feed->credit_class($credit_role, $credit_scheme, $credit_name);
     4735                                                                }
     4736                                                                if (is_array($credits))
     4737                                                                {
     4738                                                                        $credits = array_values(SimplePie_Misc::array_unique($credits));
     4739                                                                }
     4740                                                        }
     4741                                                        elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['credit']))
     4742                                                        {
     4743                                                                foreach ($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['credit'] as $credit)
     4744                                                                {
     4745                                                                        $credit_role = null;
     4746                                                                        $credit_scheme = null;
     4747                                                                        $credit_name = null;
     4748                                                                        if (isset($credit['attribs']['']['role']))
     4749                                                                        {
     4750                                                                                $credit_role = $this->sanitize($credit['attribs']['']['role'], SIMPLEPIE_CONSTRUCT_TEXT);
     4751                                                                        }
     4752                                                                        if (isset($credit['attribs']['']['scheme']))
     4753                                                                        {
     4754                                                                                $credit_scheme = $this->sanitize($credit['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT);
     4755                                                                        }
     4756                                                                        else
     4757                                                                        {
     4758                                                                                $credit_scheme = 'urn:ebu';
     4759                                                                        }
     4760                                                                        if (isset($credit['data']))
     4761                                                                        {
     4762                                                                                $credit_name = $this->sanitize($credit['data'], SIMPLEPIE_CONSTRUCT_TEXT);
     4763                                                                        }
     4764                                                                        $credits[] =& new $this->feed->credit_class($credit_role, $credit_scheme, $credit_name);
     4765                                                                }
     4766                                                                if (is_array($credits))
     4767                                                                {
     4768                                                                        $credits = array_values(SimplePie_Misc::array_unique($credits));
     4769                                                                }
     4770                                                        }
     4771                                                        else
     4772                                                        {
     4773                                                                $credits = $credits_parent;
     4774                                                        }
     4775
     4776                                                        // DESCRIPTION
     4777                                                        if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['description']))
     4778                                                        {
     4779                                                                $description = $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['description'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
     4780                                                        }
     4781                                                        elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['description']))
     4782                                                        {
     4783                                                                $description = $this->sanitize($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['description'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
     4784                                                        }
     4785                                                        else
     4786                                                        {
     4787                                                                $description = $description_parent;
     4788                                                        }
     4789
     4790                                                        // HASHES
     4791                                                        if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['hash']))
     4792                                                        {
     4793                                                                foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['hash'] as $hash)
     4794                                                                {
     4795                                                                        $value = null;
     4796                                                                        $algo = null;
     4797                                                                        if (isset($hash['data']))
     4798                                                                        {
     4799                                                                                $value = $this->sanitize($hash['data'], SIMPLEPIE_CONSTRUCT_TEXT);
     4800                                                                        }
     4801                                                                        if (isset($hash['attribs']['']['algo']))
     4802                                                                        {
     4803                                                                                $algo = $this->sanitize($hash['attribs']['']['algo'], SIMPLEPIE_CONSTRUCT_TEXT);
     4804                                                                        }
     4805                                                                        else
     4806                                                                        {
     4807                                                                                $algo = 'md5';
     4808                                                                        }
     4809                                                                        $hashes[] = $algo.':'.$value;
     4810                                                                }
     4811                                                                if (is_array($hashes))
     4812                                                                {
     4813                                                                        $hashes = array_values(SimplePie_Misc::array_unique($hashes));
     4814                                                                }
     4815                                                        }
     4816                                                        elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['hash']))
     4817                                                        {
     4818                                                                foreach ($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['hash'] as $hash)
     4819                                                                {
     4820                                                                        $value = null;
     4821                                                                        $algo = null;
     4822                                                                        if (isset($hash['data']))
     4823                                                                        {
     4824                                                                                $value = $this->sanitize($hash['data'], SIMPLEPIE_CONSTRUCT_TEXT);
     4825                                                                        }
     4826                                                                        if (isset($hash['attribs']['']['algo']))
     4827                                                                        {
     4828                                                                                $algo = $this->sanitize($hash['attribs']['']['algo'], SIMPLEPIE_CONSTRUCT_TEXT);
     4829                                                                        }
     4830                                                                        else
     4831                                                                        {
     4832                                                                                $algo = 'md5';
     4833                                                                        }
     4834                                                                        $hashes[] = $algo.':'.$value;
     4835                                                                }
     4836                                                                if (is_array($hashes))
     4837                                                                {
     4838                                                                        $hashes = array_values(SimplePie_Misc::array_unique($hashes));
     4839                                                                }
     4840                                                        }
     4841                                                        else
     4842                                                        {
     4843                                                                $hashes = $hashes_parent;
     4844                                                        }
     4845
     4846                                                        // KEYWORDS
     4847                                                        if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['keywords']))
     4848                                                        {
     4849                                                                if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['keywords'][0]['data']))
     4850                                                                {
     4851                                                                        $temp = explode(',', $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['keywords'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT));
     4852                                                                        foreach ($temp as $word)
     4853                                                                        {
     4854                                                                                $keywords[] = trim($word);
     4855                                                                        }
     4856                                                                        unset($temp);
     4857                                                                }
     4858                                                                if (is_array($keywords))
     4859                                                                {
     4860                                                                        $keywords = array_values(SimplePie_Misc::array_unique($keywords));
     4861                                                                }
     4862                                                        }
     4863                                                        elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['keywords']))
     4864                                                        {
     4865                                                                if (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['keywords'][0]['data']))
     4866                                                                {
     4867                                                                        $temp = explode(',', $this->sanitize($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['keywords'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT));
     4868                                                                        foreach ($temp as $word)
     4869                                                                        {
     4870                                                                                $keywords[] = trim($word);
     4871                                                                        }
     4872                                                                        unset($temp);
     4873                                                                }
     4874                                                                if (is_array($keywords))
     4875                                                                {
     4876                                                                        $keywords = array_values(SimplePie_Misc::array_unique($keywords));
     4877                                                                }
     4878                                                        }
     4879                                                        else
     4880                                                        {
     4881                                                                $keywords = $keywords_parent;
     4882                                                        }
     4883
     4884                                                        // PLAYER
     4885                                                        if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['player']))
     4886                                                        {
     4887                                                                $player = $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['player'][0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI);
     4888                                                        }
     4889                                                        elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['player']))
     4890                                                        {
     4891                                                                $player = $this->sanitize($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['player'][0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI);
     4892                                                        }
     4893                                                        else
     4894                                                        {
     4895                                                                $player = $player_parent;
     4896                                                        }
     4897
     4898                                                        // RATINGS
     4899                                                        if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['rating']))
     4900                                                        {
     4901                                                                foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['rating'] as $rating)
     4902                                                                {
     4903                                                                        $rating_scheme = null;
     4904                                                                        $rating_value = null;
     4905                                                                        if (isset($rating['attribs']['']['scheme']))
     4906                                                                        {
     4907                                                                                $rating_scheme = $this->sanitize($rating['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT);
     4908                                                                        }
     4909                                                                        else
     4910                                                                        {
     4911                                                                                $rating_scheme = 'urn:simple';
     4912                                                                        }
     4913                                                                        if (isset($rating['data']))
     4914                                                                        {
     4915                                                                                $rating_value = $this->sanitize($rating['data'], SIMPLEPIE_CONSTRUCT_TEXT);
     4916                                                                        }
     4917                                                                        $ratings[] =& new $this->feed->rating_class($rating_scheme, $rating_value);
     4918                                                                }
     4919                                                                if (is_array($ratings))
     4920                                                                {
     4921                                                                        $ratings = array_values(SimplePie_Misc::array_unique($ratings));
     4922                                                                }
     4923                                                        }
     4924                                                        elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['rating']))
     4925                                                        {
     4926                                                                foreach ($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['rating'] as $rating)
     4927                                                                {
     4928                                                                        $rating_scheme = null;
     4929                                                                        $rating_value = null;
     4930                                                                        if (isset($rating['attribs']['']['scheme']))
     4931                                                                        {
     4932                                                                                $rating_scheme = $this->sanitize($rating['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT);
     4933                                                                        }
     4934                                                                        else
     4935                                                                        {
     4936                                                                                $rating_scheme = 'urn:simple';
     4937                                                                        }
     4938                                                                        if (isset($rating['data']))
     4939                                                                        {
     4940                                                                                $rating_value = $this->sanitize($rating['data'], SIMPLEPIE_CONSTRUCT_TEXT);
     4941                                                                        }
     4942                                                                        $ratings[] =& new $this->feed->rating_class($rating_scheme, $rating_value);
     4943                                                                }
     4944                                                                if (is_array($ratings))
     4945                                                                {
     4946                                                                        $ratings = array_values(SimplePie_Misc::array_unique($ratings));
     4947                                                                }
     4948                                                        }
     4949                                                        else
     4950                                                        {
     4951                                                                $ratings = $ratings_parent;
     4952                                                        }
     4953
     4954                                                        // RESTRICTIONS
     4955                                                        if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['restriction']))
     4956                                                        {
     4957                                                                foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['restriction'] as $restriction)
     4958                                                                {
     4959                                                                        $restriction_relationship = null;
     4960                                                                        $restriction_type = null;
     4961                                                                        $restriction_value = null;
     4962                                                                        if (isset($restriction['attribs']['']['relationship']))
     4963                                                                        {
     4964                                                                                $restriction_relationship = $this->sanitize($restriction['attribs']['']['relationship'], SIMPLEPIE_CONSTRUCT_TEXT);
     4965                                                                        }
     4966                                                                        if (isset($restriction['attribs']['']['type']))
     4967                                                                        {
     4968                                                                                $restriction_type = $this->sanitize($restriction['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT);
     4969                                                                        }
     4970                                                                        if (isset($restriction['data']))
     4971                                                                        {
     4972                                                                                $restriction_value = $this->sanitize($restriction['data'], SIMPLEPIE_CONSTRUCT_TEXT);
     4973                                                                        }
     4974                                                                        $restrictions[] =& new $this->feed->restriction_class($restriction_relationship, $restriction_type, $restriction_value);
     4975                                                                }
     4976                                                                if (is_array($restrictions))
     4977                                                                {
     4978                                                                        $restrictions = array_values(SimplePie_Misc::array_unique($restrictions));
     4979                                                                }
     4980                                                        }
     4981                                                        elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['restriction']))
     4982                                                        {
     4983                                                                foreach ($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['restriction'] as $restriction)
     4984                                                                {
     4985                                                                        $restriction_relationship = null;
     4986                                                                        $restriction_type = null;
     4987                                                                        $restriction_value = null;
     4988                                                                        if (isset($restriction['attribs']['']['relationship']))
     4989                                                                        {
     4990                                                                                $restriction_relationship = $this->sanitize($restriction['attribs']['']['relationship'], SIMPLEPIE_CONSTRUCT_TEXT);
     4991                                                                        }
     4992                                                                        if (isset($restriction['attribs']['']['type']))
     4993                                                                        {
     4994                                                                                $restriction_type = $this->sanitize($restriction['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT);
     4995                                                                        }
     4996                                                                        if (isset($restriction['data']))
     4997                                                                        {
     4998                                                                                $restriction_value = $this->sanitize($restriction['data'], SIMPLEPIE_CONSTRUCT_TEXT);
     4999                                                                        }
     5000                                                                        $restrictions[] =& new $this->feed->restriction_class($restriction_relationship, $restriction_type, $restriction_value);
     5001                                                                }
     5002                                                                if (is_array($restrictions))
     5003                                                                {
     5004                                                                        $restrictions = array_values(SimplePie_Misc::array_unique($restrictions));
     5005                                                                }
     5006                                                        }
     5007                                                        else
     5008                                                        {
     5009                                                                $restrictions = $restrictions_parent;
     5010                                                        }
     5011
     5012                                                        // THUMBNAILS
     5013                                                        if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['thumbnail']))
     5014                                                        {
     5015                                                                foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['thumbnail'] as $thumbnail)
     5016                                                                {
     5017                                                                        $thumbnails[] = $this->sanitize($thumbnail['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI);
     5018                                                                }
     5019                                                                if (is_array($thumbnails))
     5020                                                                {
     5021                                                                        $thumbnails = array_values(SimplePie_Misc::array_unique($thumbnails));
     5022                                                                }
     5023                                                        }
     5024                                                        elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['thumbnail']))
     5025                                                        {
     5026                                                                foreach ($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['thumbnail'] as $thumbnail)
     5027                                                                {
     5028                                                                        $thumbnails[] = $this->sanitize($thumbnail['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI);
     5029                                                                }
     5030                                                                if (is_array($thumbnails))
     5031                                                                {
     5032                                                                        $thumbnails = array_values(SimplePie_Misc::array_unique($thumbnails));
     5033                                                                }
     5034                                                        }
     5035                                                        else
     5036                                                        {
     5037                                                                $thumbnails = $thumbnails_parent;
     5038                                                        }
     5039
     5040                                                        // TITLES
     5041                                                        if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['title']))
     5042                                                        {
     5043                                                                $title = $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['title'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
     5044                                                        }
     5045                                                        elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['title']))
     5046                                                        {
     5047                                                                $title = $this->sanitize($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['title'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
     5048                                                        }
     5049                                                        else
     5050                                                        {
     5051                                                                $title = $title_parent;
     5052                                                        }
     5053
     5054                                                        $this->data['enclosures'][] =& new $this->feed->enclosure_class($url, $type, $length, $this->feed->javascript, $bitrate, $captions, $categories, $channels, $copyrights, $credits, $description, $duration, $expression, $framerate, $hashes, $height, $keywords, $lang, $medium, $player, $ratings, $restrictions, $samplingrate, $thumbnails, $title, $width);
     5055                                                }
     5056                                        }
     5057                                }
     5058                        }
     5059
     5060                        // If we have standalone media:content tags, loop through them.
     5061                        if (isset($this->data['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['content']))
     5062                        {
     5063                                foreach ((array) $this->data['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['content'] as $content)
     5064                                {
     5065                                        if (isset($content['attribs']['']['url']) || isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['player']))
    44355066                                        {
    44365067                                                // Attributes
     
    45175148                                                        $width = $this->sanitize($content['attribs']['']['width'], SIMPLEPIE_CONSTRUCT_TEXT);
    45185149                                                }
    4519                                                 $url = $this->sanitize($content['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI);
    4520 
    4521                                                 // Checking the other optional media: elements. Priority: media:content, media:group, item, channel
    4522 
    4523                                                 // CAPTIONS
    4524                                                 if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['text']))
     5150                                                if (isset($content['attribs']['']['url']))
    45255151                                                {
    4526                                                         foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['text'] as $caption)
    4527                                                         {
    4528                                                                 $caption_type = null;
    4529                                                                 $caption_lang = null;
    4530                                                                 $caption_startTime = null;
    4531                                                                 $caption_endTime = null;
    4532                                                                 $caption_text = null;
    4533                                                                 if (isset($caption['attribs']['']['type']))
    4534                                                                 {
    4535                                                                         $caption_type = $this->sanitize($caption['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT);
    4536                                                                 }
    4537                                                                 if (isset($caption['attribs']['']['lang']))
    4538                                                                 {
    4539                                                                         $caption_lang = $this->sanitize($caption['attribs']['']['lang'], SIMPLEPIE_CONSTRUCT_TEXT);
    4540                                                                 }
    4541                                                                 if (isset($caption['attribs']['']['start']))
    4542                                                                 {
    4543                                                                         $caption_startTime = $this->sanitize($caption['attribs']['']['start'], SIMPLEPIE_CONSTRUCT_TEXT);
    4544                                                                 }
    4545                                                                 if (isset($caption['attribs']['']['end']))
    4546                                                                 {
    4547                                                                         $caption_endTime = $this->sanitize($caption['attribs']['']['end'], SIMPLEPIE_CONSTRUCT_TEXT);
    4548                                                                 }
    4549                                                                 if (isset($caption['data']))
    4550                                                                 {
    4551                                                                         $caption_text = $this->sanitize($caption['data'], SIMPLEPIE_CONSTRUCT_TEXT);
    4552                                                                 }
    4553                                                                 $captions[] =& new $this->feed->caption_class($caption_type, $caption_lang, $caption_startTime, $caption_endTime, $caption_text);
    4554                                                         }
    4555                                                         if (is_array($captions))
    4556                                                         {
    4557                                                                 $captions = array_values(SimplePie_Misc::array_unique($captions));
    4558                                                         }
     5152                                                        $url = $this->sanitize($content['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI);
    45595153                                                }
    4560                                                 elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['text']))
    4561                                                 {
    4562                                                         foreach ($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['text'] as $caption)
    4563                                                         {
    4564                                                                 $caption_type = null;
    4565                                                                 $caption_lang = null;
    4566                                                                 $caption_startTime = null;
    4567                                                                 $caption_endTime = null;
    4568                                                                 $caption_text = null;
    4569                                                                 if (isset($caption['attribs']['']['type']))
    4570                                                                 {
    4571                                                                         $caption_type = $this->sanitize($caption['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT);
    4572                                                                 }
    4573                                                                 if (isset($caption['attribs']['']['lang']))
    4574                                                                 {
    4575                                                                         $caption_lang = $this->sanitize($caption['attribs']['']['lang'], SIMPLEPIE_CONSTRUCT_TEXT);
    4576                                                                 }
    4577                                                                 if (isset($caption['attribs']['']['start']))
    4578                                                                 {
    4579                                                                         $caption_startTime = $this->sanitize($caption['attribs']['']['start'], SIMPLEPIE_CONSTRUCT_TEXT);
    4580                                                                 }
    4581                                                                 if (isset($caption['attribs']['']['end']))
    4582                                                                 {
    4583                                                                         $caption_endTime = $this->sanitize($caption['attribs']['']['end'], SIMPLEPIE_CONSTRUCT_TEXT);
    4584                                                                 }
    4585                                                                 if (isset($caption['data']))
    4586                                                                 {
    4587                                                                         $caption_text = $this->sanitize($caption['data'], SIMPLEPIE_CONSTRUCT_TEXT);
    4588                                                                 }
    4589                                                                 $captions[] =& new $this->feed->caption_class($caption_type, $caption_lang, $caption_startTime, $caption_endTime, $caption_text);
    4590                                                         }
    4591                                                         if (is_array($captions))
    4592                                                         {
    4593                                                                 $captions = array_values(SimplePie_Misc::array_unique($captions));
    4594                                                         }
    4595                                                 }
    4596                                                 else
    4597                                                 {
    4598                                                         $captions = $captions_parent;
    4599                                                 }
    4600 
    4601                                                 // CATEGORIES
    4602                                                 if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['category']))
    4603                                                 {
    4604                                                         foreach ((array) $content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['category'] as $category)
    4605                                                         {
    4606                                                                 $term = null;
    4607                                                                 $scheme = null;
    4608                                                                 $label = null;
    4609                                                                 if (isset($category['data']))
    4610                                                                 {
    4611                                                                         $term = $this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT);
    4612                                                                 }
    4613                                                                 if (isset($category['attribs']['']['scheme']))
    4614                                                                 {
    4615                                                                         $scheme = $this->sanitize($category['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT);
    4616                                                                 }
    4617                                                                 else
    4618                                                                 {
    4619                                                                         $scheme = 'http://search.yahoo.com/mrss/category_schema';
    4620                                                                 }
    4621                                                                 if (isset($category['attribs']['']['label']))
    4622                                                                 {
    4623                                                                         $label = $this->sanitize($category['attribs']['']['label'], SIMPLEPIE_CONSTRUCT_TEXT);
    4624                                                                 }
    4625                                                                 $categories[] =& new $this->feed->category_class($term, $scheme, $label);
    4626                                                         }
    4627                                                 }
    4628                                                 if (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['category']))
    4629                                                 {
    4630                                                         foreach ((array) $group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['category'] as $category)
    4631                                                         {
    4632                                                                 $term = null;
    4633                                                                 $scheme = null;
    4634                                                                 $label = null;
    4635                                                                 if (isset($category['data']))
    4636                                                                 {
    4637                                                                         $term = $this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT);
    4638                                                                 }
    4639                                                                 if (isset($category['attribs']['']['scheme']))
    4640                                                                 {
    4641                                                                         $scheme = $this->sanitize($category['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT);
    4642                                                                 }
    4643                                                                 else
    4644                                                                 {
    4645                                                                         $scheme = 'http://search.yahoo.com/mrss/category_schema';
    4646                                                                 }
    4647                                                                 if (isset($category['attribs']['']['label']))
    4648                                                                 {
    4649                                                                         $label = $this->sanitize($category['attribs']['']['label'], SIMPLEPIE_CONSTRUCT_TEXT);
    4650                                                                 }
    4651                                                                 $categories[] =& new $this->feed->category_class($term, $scheme, $label);
    4652                                                         }
    4653                                                 }
    4654                                                 if (is_array($categories) && is_array($categories_parent))
    4655                                                 {
    4656                                                         $categories = array_values(SimplePie_Misc::array_unique(array_merge($categories, $categories_parent)));
    4657                                                 }
    4658                                                 elseif (is_array($categories))
    4659                                                 {
    4660                                                         $categories = array_values(SimplePie_Misc::array_unique($categories));
    4661                                                 }
    4662                                                 elseif (is_array($categories_parent))
    4663                                                 {
    4664                                                         $categories = array_values(SimplePie_Misc::array_unique($categories_parent));
    4665                                                 }
    4666 
    4667                                                 // COPYRIGHTS
    4668                                                 if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright']))
    4669                                                 {
    4670                                                         $copyright_url = null;
    4671                                                         $copyright_label = null;
    4672                                                         if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['attribs']['']['url']))
    4673                                                         {
    4674                                                                 $copyright_url = $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_TEXT);
    4675                                                         }
    4676                                                         if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['data']))
    4677                                                         {
    4678                                                                 $copyright_label = $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
    4679                                                         }
    4680                                                         $copyrights =& new $this->feed->copyright_class($copyright_url, $copyright_label);
    4681                                                 }
    4682                                                 elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright']))
    4683                                                 {
    4684                                                         $copyright_url = null;
    4685                                                         $copyright_label = null;
    4686                                                         if (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['attribs']['']['url']))
    4687                                                         {
    4688                                                                 $copyright_url = $this->sanitize($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_TEXT);
    4689                                                         }
    4690                                                         if (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['data']))
    4691                                                         {
    4692                                                                 $copyright_label = $this->sanitize($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
    4693                                                         }
    4694                                                         $copyrights =& new $this->feed->copyright_class($copyright_url, $copyright_label);
    4695                                                 }
    4696                                                 else
    4697                                                 {
    4698                                                         $copyrights = $copyrights_parent;
    4699                                                 }
    4700 
    4701                                                 // CREDITS
    4702                                                 if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['credit']))
    4703                                                 {
    4704                                                         foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['credit'] as $credit)
    4705                                                         {
    4706                                                                 $credit_role = null;
    4707                                                                 $credit_scheme = null;
    4708                                                                 $credit_name = null;
    4709                                                                 if (isset($credit['attribs']['']['role']))
    4710                                                                 {
    4711                                                                         $credit_role = $this->sanitize($credit['attribs']['']['role'], SIMPLEPIE_CONSTRUCT_TEXT);
    4712                                                                 }
    4713                                                                 if (isset($credit['attribs']['']['scheme']))
    4714                                                                 {
    4715                                                                         $credit_scheme = $this->sanitize($credit['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT);
    4716                                                                 }
    4717                                                                 else
    4718                                                                 {
    4719                                                                         $credit_scheme = 'urn:ebu';
    4720                                                                 }
    4721                                                                 if (isset($credit['data']))
    4722                                                                 {
    4723                                                                         $credit_name = $this->sanitize($credit['data'], SIMPLEPIE_CONSTRUCT_TEXT);
    4724                                                                 }
    4725                                                                 $credits[] =& new $this->feed->credit_class($credit_role, $credit_scheme, $credit_name);
    4726                                                         }
    4727                                                         if (is_array($credits))
    4728                                                         {
    4729                                                                 $credits = array_values(SimplePie_Misc::array_unique($credits));
    4730                                                         }
    4731                                                 }
    4732                                                 elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['credit']))
    4733                                                 {
    4734                                                         foreach ($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['credit'] as $credit)
    4735                                                         {
    4736                                                                 $credit_role = null;
    4737                                                                 $credit_scheme = null;
    4738                                                                 $credit_name = null;
    4739                                                                 if (isset($credit['attribs']['']['role']))
    4740                                                                 {
    4741                                                                         $credit_role = $this->sanitize($credit['attribs']['']['role'], SIMPLEPIE_CONSTRUCT_TEXT);
    4742                                                                 }
    4743                                                                 if (isset($credit['attribs']['']['scheme']))
    4744                                                                 {
    4745                                                                         $credit_scheme = $this->sanitize($credit['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT);
    4746                                                                 }
    4747                                                                 else
    4748                                                                 {
    4749                                                                         $credit_scheme = 'urn:ebu';
    4750                                                                 }
    4751                                                                 if (isset($credit['data']))
    4752                                                                 {
    4753                                                                         $credit_name = $this->sanitize($credit['data'], SIMPLEPIE_CONSTRUCT_TEXT);
    4754                                                                 }
    4755                                                                 $credits[] =& new $this->feed->credit_class($credit_role, $credit_scheme, $credit_name);
    4756                                                         }
    4757                                                         if (is_array($credits))
    4758                                                         {
    4759                                                                 $credits = array_values(SimplePie_Misc::array_unique($credits));
    4760                                                         }
    4761                                                 }
    4762                                                 else
    4763                                                 {
    4764                                                         $credits = $credits_parent;
    4765                                                 }
    4766 
    4767                                                 // DESCRIPTION
    4768                                                 if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['description']))
    4769                                                 {
    4770                                                         $description = $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['description'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
    4771                                                 }
    4772                                                 elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['description']))
    4773                                                 {
    4774                                                         $description = $this->sanitize($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['description'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
    4775                                                 }
    4776                                                 else
    4777                                                 {
    4778                                                         $description = $description_parent;
    4779                                                 }
    4780 
    4781                                                 // HASHES
    4782                                                 if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['hash']))
    4783                                                 {
    4784                                                         foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['hash'] as $hash)
    4785                                                         {
    4786                                                                 $value = null;
    4787                                                                 $algo = null;
    4788                                                                 if (isset($hash['data']))
    4789                                                                 {
    4790                                                                         $value = $this->sanitize($hash['data'], SIMPLEPIE_CONSTRUCT_TEXT);
    4791                                                                 }
    4792                                                                 if (isset($hash['attribs']['']['algo']))
    4793                                                                 {
    4794                                                                         $algo = $this->sanitize($hash['attribs']['']['algo'], SIMPLEPIE_CONSTRUCT_TEXT);
    4795                                                                 }
    4796                                                                 else
    4797                                                                 {
    4798                                                                         $algo = 'md5';
    4799                                                                 }
    4800                                                                 $hashes[] = $algo.':'.$value;
    4801                                                         }
    4802                                                         if (is_array($hashes))
    4803                                                         {
    4804                                                                 $hashes = array_values(SimplePie_Misc::array_unique($hashes));
    4805                                                         }
    4806                                                 }
    4807                                                 elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['hash']))
    4808                                                 {
    4809                                                         foreach ($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['hash'] as $hash)
    4810                                                         {
    4811                                                                 $value = null;
    4812                                                                 $algo = null;
    4813                                                                 if (isset($hash['data']))
    4814                                                                 {
    4815                                                                         $value = $this->sanitize($hash['data'], SIMPLEPIE_CONSTRUCT_TEXT);
    4816                                                                 }
    4817                                                                 if (isset($hash['attribs']['']['algo']))
    4818                                                                 {
    4819                                                                         $algo = $this->sanitize($hash['attribs']['']['algo'], SIMPLEPIE_CONSTRUCT_TEXT);
    4820                                                                 }
    4821                                                                 else
    4822                                                                 {
    4823                                                                         $algo = 'md5';
    4824                                                                 }
    4825                                                                 $hashes[] = $algo.':'.$value;
    4826                                                         }
    4827                                                         if (is_array($hashes))
    4828                                                         {
    4829                                                                 $hashes = array_values(SimplePie_Misc::array_unique($hashes));
    4830                                                         }
    4831                                                 }
    4832                                                 else
    4833                                                 {
    4834                                                         $hashes = $hashes_parent;
    4835                                                 }
    4836 
    4837                                                 // KEYWORDS
    4838                                                 if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['keywords']))
    4839                                                 {
    4840                                                         if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['keywords'][0]['data']))
    4841                                                         {
    4842                                                                 $temp = explode(',', $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['keywords'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT));
    4843                                                                 foreach ($temp as $word)
    4844                                                                 {
    4845                                                                         $keywords[] = trim($word);
    4846                                                                 }
    4847                                                                 unset($temp);
    4848                                                         }
    4849                                                         if (is_array($keywords))
    4850                                                         {
    4851                                                                 $keywords = array_values(SimplePie_Misc::array_unique($keywords));
    4852                                                         }
    4853                                                 }
    4854                                                 elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['keywords']))
    4855                                                 {
    4856                                                         if (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['keywords'][0]['data']))
    4857                                                         {
    4858                                                                 $temp = explode(',', $this->sanitize($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['keywords'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT));
    4859                                                                 foreach ($temp as $word)
    4860                                                                 {
    4861                                                                         $keywords[] = trim($word);
    4862                                                                 }
    4863                                                                 unset($temp);
    4864                                                         }
    4865                                                         if (is_array($keywords))
    4866                                                         {
    4867                                                                 $keywords = array_values(SimplePie_Misc::array_unique($keywords));
    4868                                                         }
    4869                                                 }
    4870                                                 else
    4871                                                 {
    4872                                                         $keywords = $keywords_parent;
    4873                                                 }
    4874 
    4875                                                 // PLAYER
    4876                                                 if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['player']))
    4877                                                 {
    4878                                                         $player = $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['player'][0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI);
    4879                                                 }
    4880                                                 elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['player']))
    4881                                                 {
    4882                                                         $player = $this->sanitize($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['player'][0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI);
    4883                                                 }
    4884                                                 else
    4885                                                 {
    4886                                                         $player = $player_parent;
    4887                                                 }
    4888 
    4889                                                 // RATINGS
    4890                                                 if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['rating']))
    4891                                                 {
    4892                                                         foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['rating'] as $rating)
    4893                                                         {
    4894                                                                 $rating_scheme = null;
    4895                                                                 $rating_value = null;
    4896                                                                 if (isset($rating['attribs']['']['scheme']))
    4897                                                                 {
    4898                                                                         $rating_scheme = $this->sanitize($rating['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT);
    4899                                                                 }
    4900                                                                 else
    4901                                                                 {
    4902                                                                         $rating_scheme = 'urn:simple';
    4903                                                                 }
    4904                                                                 if (isset($rating['data']))
    4905                                                                 {
    4906                                                                         $rating_value = $this->sanitize($rating['data'], SIMPLEPIE_CONSTRUCT_TEXT);
    4907                                                                 }
    4908                                                                 $ratings[] =& new $this->feed->rating_class($rating_scheme, $rating_value);
    4909                                                         }
    4910                                                         if (is_array($ratings))
    4911                                                         {
    4912                                                                 $ratings = array_values(SimplePie_Misc::array_unique($ratings));
    4913                                                         }
    4914                                                 }
    4915                                                 elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['rating']))
    4916                                                 {
    4917                                                         foreach ($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['rating'] as $rating)
    4918                                                         {
    4919                                                                 $rating_scheme = null;
    4920                                                                 $rating_value = null;
    4921                                                                 if (isset($rating['attribs']['']['scheme']))
    4922                                                                 {
    4923                                                                         $rating_scheme = $this->sanitize($rating['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT);
    4924                                                                 }
    4925                                                                 else
    4926                                                                 {
    4927                                                                         $rating_scheme = 'urn:simple';
    4928                                                                 }
    4929                                                                 if (isset($rating['data']))
    4930                                                                 {
    4931                                                                         $rating_value = $this->sanitize($rating['data'], SIMPLEPIE_CONSTRUCT_TEXT);
    4932                                                                 }
    4933                                                                 $ratings[] =& new $this->feed->rating_class($rating_scheme, $rating_value);
    4934                                                         }
    4935                                                         if (is_array($ratings))
    4936                                                         {
    4937                                                                 $ratings = array_values(SimplePie_Misc::array_unique($ratings));
    4938                                                         }
    4939                                                 }
    4940                                                 else
    4941                                                 {
    4942                                                         $ratings = $ratings_parent;
    4943                                                 }
    4944 
    4945                                                 // RESTRICTIONS
    4946                                                 if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['restriction']))
    4947                                                 {
    4948                                                         foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['restriction'] as $restriction)
    4949                                                         {
    4950                                                                 $restriction_relationship = null;
    4951                                                                 $restriction_type = null;
    4952                                                                 $restriction_value = null;
    4953                                                                 if (isset($restriction['attribs']['']['relationship']))
    4954                                                                 {
    4955                                                                         $restriction_relationship = $this->sanitize($restriction['attribs']['']['relationship'], SIMPLEPIE_CONSTRUCT_TEXT);
    4956                                                                 }
    4957                                                                 if (isset($restriction['attribs']['']['type']))
    4958                                                                 {
    4959                                                                         $restriction_type = $this->sanitize($restriction['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT);
    4960                                                                 }
    4961                                                                 if (isset($restriction['data']))
    4962                                                                 {
    4963                                                                         $restriction_value = $this->sanitize($restriction['data'], SIMPLEPIE_CONSTRUCT_TEXT);
    4964                                                                 }
    4965                                                                 $restrictions[] =& new $this->feed->restriction_class($restriction_relationship, $restriction_type, $restriction_value);
    4966                                                         }
    4967                                                         if (is_array($restrictions))
    4968                                                         {
    4969                                                                 $restrictions = array_values(SimplePie_Misc::array_unique($restrictions));
    4970                                                         }
    4971                                                 }
    4972                                                 elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['restriction']))
    4973                                                 {
    4974                                                         foreach ($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['restriction'] as $restriction)
    4975                                                         {
    4976                                                                 $restriction_relationship = null;
    4977                                                                 $restriction_type = null;
    4978                                                                 $restriction_value = null;
    4979                                                                 if (isset($restriction['attribs']['']['relationship']))
    4980                                                                 {
    4981                                                                         $restriction_relationship = $this->sanitize($restriction['attribs']['']['relationship'], SIMPLEPIE_CONSTRUCT_TEXT);
    4982                                                                 }
    4983                                                                 if (isset($restriction['attribs']['']['type']))
    4984                                                                 {
    4985                                                                         $restriction_type = $this->sanitize($restriction['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT);
    4986                                                                 }
    4987                                                                 if (isset($restriction['data']))
    4988                                                                 {
    4989                                                                         $restriction_value = $this->sanitize($restriction['data'], SIMPLEPIE_CONSTRUCT_TEXT);
    4990                                                                 }
    4991                                                                 $restrictions[] =& new $this->feed->restriction_class($restriction_relationship, $restriction_type, $restriction_value);
    4992                                                         }
    4993                                                         if (is_array($restrictions))
    4994                                                         {
    4995                                                                 $restrictions = array_values(SimplePie_Misc::array_unique($restrictions));
    4996                                                         }
    4997                                                 }
    4998                                                 else
    4999                                                 {
    5000                                                         $restrictions = $restrictions_parent;
    5001                                                 }
    5002 
    5003                                                 // THUMBNAILS
    5004                                                 if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['thumbnail']))
    5005                                                 {
    5006                                                         foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['thumbnail'] as $thumbnail)
    5007                                                         {
    5008                                                                 $thumbnails[] = $this->sanitize($thumbnail['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI);
    5009                                                         }
    5010                                                         if (is_array($thumbnails))
    5011                                                         {
    5012                                                                 $thumbnails = array_values(SimplePie_Misc::array_unique($thumbnails));
    5013                                                         }
    5014                                                 }
    5015                                                 elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['thumbnail']))
    5016                                                 {
    5017                                                         foreach ($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['thumbnail'] as $thumbnail)
    5018                                                         {
    5019                                                                 $thumbnails[] = $this->sanitize($thumbnail['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI);
    5020                                                         }
    5021                                                         if (is_array($thumbnails))
    5022                                                         {
    5023                                                                 $thumbnails = array_values(SimplePie_Misc::array_unique($thumbnails));
    5024                                                         }
    5025                                                 }
    5026                                                 else
    5027                                                 {
    5028                                                         $thumbnails = $thumbnails_parent;
    5029                                                 }
    5030 
    5031                                                 // TITLES
    5032                                                 if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['title']))
    5033                                                 {
    5034                                                         $title = $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['title'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
    5035                                                 }
    5036                                                 elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['title']))
    5037                                                 {
    5038                                                         $title = $this->sanitize($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['title'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
    5039                                                 }
    5040                                                 else
    5041                                                 {
    5042                                                         $title = $title_parent;
    5043                                                 }
    5044 
    5045                                                 $this->data['enclosures'][] =& new $this->feed->enclosure_class($url, $type, $length, $this->feed->javascript, $bitrate, $captions, $categories, $channels, $copyrights, $credits, $description, $duration, $expression, $framerate, $hashes, $height, $keywords, $lang, $medium, $player, $ratings, $restrictions, $samplingrate, $thumbnails, $title, $width);
    5046                                         }
    5047                                 }
    5048                         }
    5049 
    5050                         // If we have standalone media:content tags, loop through them.
    5051                         if (isset($this->data['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['content']))
    5052                         {
    5053                                 foreach ((array) $this->data['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['content'] as $content)
    5054                                 {
    5055                                         if (isset($content['attribs']['']['url']))
    5056                                         {
    5057                                                 // Attributes
    5058                                                 $bitrate = null;
    5059                                                 $channels = null;
    5060                                                 $duration = null;
    5061                                                 $expression = null;
    5062                                                 $framerate = null;
    5063                                                 $height = null;
    5064                                                 $javascript = null;
    5065                                                 $lang = null;
    5066                                                 $length = null;
    5067                                                 $medium = null;
    5068                                                 $samplingrate = null;
    5069                                                 $type = null;
    5070                                                 $url = null;
    5071                                                 $width = null;
    5072 
    5073                                                 // Elements
    5074                                                 $captions = null;
    5075                                                 $categories = null;
    5076                                                 $copyrights = null;
    5077                                                 $credits = null;
    5078                                                 $description = null;
    5079                                                 $hashes = null;
    5080                                                 $keywords = null;
    5081                                                 $player = null;
    5082                                                 $ratings = null;
    5083                                                 $restrictions = null;
    5084                                                 $thumbnails = null;
    5085                                                 $title = null;
    5086 
    5087                                                 // Start checking the attributes of media:content
    5088                                                 if (isset($content['attribs']['']['bitrate']))
    5089                                                 {
    5090                                                         $bitrate = $this->sanitize($content['attribs']['']['bitrate'], SIMPLEPIE_CONSTRUCT_TEXT);
    5091                                                 }
    5092                                                 if (isset($content['attribs']['']['channels']))
    5093                                                 {
    5094                                                         $channels = $this->sanitize($content['attribs']['']['channels'], SIMPLEPIE_CONSTRUCT_TEXT);
    5095                                                 }
    5096                                                 if (isset($content['attribs']['']['duration']))
    5097                                                 {
    5098                                                         $duration = $this->sanitize($content['attribs']['']['duration'], SIMPLEPIE_CONSTRUCT_TEXT);
    5099                                                 }
    5100                                                 else
    5101                                                 {
    5102                                                         $duration = $duration_parent;
    5103                                                 }
    5104                                                 if (isset($content['attribs']['']['expression']))
    5105                                                 {
    5106                                                         $expression = $this->sanitize($content['attribs']['']['expression'], SIMPLEPIE_CONSTRUCT_TEXT);
    5107                                                 }
    5108                                                 if (isset($content['attribs']['']['framerate']))
    5109                                                 {
    5110                                                         $framerate = $this->sanitize($content['attribs']['']['framerate'], SIMPLEPIE_CONSTRUCT_TEXT);
    5111                                                 }
    5112                                                 if (isset($content['attribs']['']['height']))
    5113                                                 {
    5114                                                         $height = $this->sanitize($content['attribs']['']['height'], SIMPLEPIE_CONSTRUCT_TEXT);
    5115                                                 }
    5116                                                 if (isset($content['attribs']['']['lang']))
    5117                                                 {
    5118                                                         $lang = $this->sanitize($content['attribs']['']['lang'], SIMPLEPIE_CONSTRUCT_TEXT);
    5119                                                 }
    5120                                                 if (isset($content['attribs']['']['fileSize']))
    5121                                                 {
    5122                                                         $length = ceil($content['attribs']['']['fileSize']);
    5123                                                 }
    5124                                                 if (isset($content['attribs']['']['medium']))
    5125                                                 {
    5126                                                         $medium = $this->sanitize($content['attribs']['']['medium'], SIMPLEPIE_CONSTRUCT_TEXT);
    5127                                                 }
    5128                                                 if (isset($content['attribs']['']['samplingrate']))
    5129                                                 {
    5130                                                         $samplingrate = $this->sanitize($content['attribs']['']['samplingrate'], SIMPLEPIE_CONSTRUCT_TEXT);
    5131                                                 }
    5132                                                 if (isset($content['attribs']['']['type']))
    5133                                                 {
    5134                                                         $type = $this->sanitize($content['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT);
    5135                                                 }
    5136                                                 if (isset($content['attribs']['']['width']))
    5137                                                 {
    5138                                                         $width = $this->sanitize($content['attribs']['']['width'], SIMPLEPIE_CONSTRUCT_TEXT);
    5139                                                 }
    5140                                                 $url = $this->sanitize($content['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI);
    5141 
    51425154                                                // Checking the other optional media: elements. Priority: media:content, media:group, item, channel
    51435155
     
    55815593                        return (float) $return[0]['data'];
    55825594                }
    5583                 elseif (($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_GEORSS, 'point')) && preg_match('/^((?:-)?[0-9]+(?:\.[0-9]+)) ((?:-)?[0-9]+(?:\.[0-9]+))$/', $return[0]['data'], $match))
     5595                elseif (($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_GEORSS, 'point')) && preg_match('/^((?:-)?[0-9]+(?:\.[0-9]+)) ((?:-)?[0-9]+(?:\.[0-9]+))$/', trim($return[0]['data']), $match))
    55845596                {
    55855597                        return (float) $match[1];
     
    56015613                        return (float) $return[0]['data'];
    56025614                }
    5603                 elseif (($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_GEORSS, 'point')) && preg_match('/^((?:-)?[0-9]+(?:\.[0-9]+)) ((?:-)?[0-9]+(?:\.[0-9]+))$/', $return[0]['data'], $match))
     5615                elseif (($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_GEORSS, 'point')) && preg_match('/^((?:-)?[0-9]+(?:\.[0-9]+)) ((?:-)?[0-9]+(?:\.[0-9]+))$/', trim($return[0]['data']), $match))
    56045616                {
    56055617                        return (float) $match[2];
     
    62246236                        return (float) $return[0]['data'];
    62256237                }
    6226                 elseif (($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_GEORSS, 'point')) && preg_match('/^((?:-)?[0-9]+(?:\.[0-9]+)) ((?:-)?[0-9]+(?:\.[0-9]+))$/', $return[0]['data'], $match))
     6238                elseif (($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_GEORSS, 'point')) && preg_match('/^((?:-)?[0-9]+(?:\.[0-9]+)) ((?:-)?[0-9]+(?:\.[0-9]+))$/', trim($return[0]['data']), $match))
    62276239                {
    62286240                        return (float) $match[1];
     
    62446256                        return (float) $return[0]['data'];
    62456257                }
    6246                 elseif (($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_GEORSS, 'point')) && preg_match('/^((?:-)?[0-9]+(?:\.[0-9]+)) ((?:-)?[0-9]+(?:\.[0-9]+))$/', $return[0]['data'], $match))
     6258                elseif (($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_GEORSS, 'point')) && preg_match('/^((?:-)?[0-9]+(?:\.[0-9]+)) ((?:-)?[0-9]+(?:\.[0-9]+))$/', trim($return[0]['data']), $match))
    62476259                {
    62486260                        return (float) $match[2];
     
    77287740                                $this->method = SIMPLEPIE_FILE_SOURCE_REMOTE | SIMPLEPIE_FILE_SOURCE_FSOCKOPEN;
    77297741                                $url_parts = parse_url($url);
     7742                                $socket_host = $url_parts['host'];
    77307743                                if (isset($url_parts['scheme']) && strtolower($url_parts['scheme']) === 'https')
    77317744                                {
    7732                                         $url_parts['host'] = "ssl://$url_parts[host]";
     7745                                        $socket_host = "ssl://$url_parts[host]";
    77337746                                        $url_parts['port'] = 443;
    77347747                                }
     
    77377750                                        $url_parts['port'] = 80;
    77387751                                }
    7739                                 $fp = @fsockopen($url_parts['host'], $url_parts['port'], $errno, $errstr, $timeout);
     7752                                $fp = @fsockopen($socket_host, $url_parts['port'], $errno, $errstr, $timeout);
    77407753                                if (!$fp)
    77417754                                {
     
    84838496                                // Get the length of the extra field
    84848497                                $len = current(unpack('v', substr($this->compressed_data, $this->position, 2)));
    8485                                 $position += 2;
     8498                                $this->position += 2;
    84868499
    84878500                                // Check the length of the string is still valid
     
    92359248                                        break;
    92369249                        }
    9237                         error_log("$note: $message in $file on line $line", 0);
    9238                 }
     9250
     9251                        $log_error = true;
     9252                        if (!function_exists('error_log'))
     9253                        {
     9254                                $log_error = false;
     9255                        }
     9256
     9257                        $log_file = @ini_get('error_log');
     9258                        if (!empty($log_file) && ('syslog' != $log_file) && !@is_writable($log_file))
     9259                        {
     9260                                $log_error = false;
     9261                        }
     9262
     9263                        if ($log_error)
     9264                        {
     9265                                @error_log("$note: $message in $file on line $line", 0);
     9266                        }
     9267                }
     9268
    92399269                return $message;
    92409270        }
     
    94339463                }
    94349464                // This is second, as behaviour of this varies only with PHP version (the middle part of this expression checks the encoding is supported).
    9435                 elseif (function_exists('mb_convert_encoding') && @mb_convert_encoding("\x80", 'UTF-16BE', $input) !== "\x00\x80" && ($return = @mb_convert_encoding($data, $output, $input)))
     9465                elseif (function_exists('mb_convert_encoding') && @mb_convert_encoding("\x80", 'UTF-16BE', $input) !== "\x00\x80" && in_array($input, mb_list_encodings()) && ($return = @mb_convert_encoding($data, $output, $input)))
    94369466                {
    94379467                        return $return;
     
    94499479        }
    94509480
     9481        /**
     9482         * Normalize an encoding name
     9483         *
     9484         * This is automatically generated by create.php
     9485         *
     9486         * To generate it, run `php create.php` on the command line, and copy the
     9487         * output to replace this function.
     9488         *
     9489         * @param string $charset Character set to standardise
     9490         * @return string Standardised name
     9491         */
    94519492        function encoding($charset)
    94529493        {
     
    94829523                        case 'big5':
    94839524                        case 'csbig5':
    9484                         case 'xxbig5':
    94859525                                return 'Big5';
    94869526
     
    96389678                                return 'ES2';
    96399679
     9680                        case 'cseucpkdfmtjapanese':
     9681                        case 'eucjp':
     9682                        case 'extendedunixcodepackedformatforjapanese':
     9683                                return 'EUC-JP';
     9684
    96409685                        case 'cseucfixwidjapanese':
    96419686                        case 'extendedunixcodefixedwidthforjapanese':
    96429687                                return 'Extended_UNIX_Code_Fixed_Width_for_Japanese';
    9643 
    9644                         case 'cseucpkdfmtjapanese':
    9645                         case 'eucjp':
    9646                         case 'extendedunixcodepackedformatforjapanese':
    9647                                 return 'Extended_UNIX_Code_Packed_Format_for_Japanese';
    96489688
    96499689                        case 'gb18030':
     
    97249764                                return 'IBM-Thai';
    97259765
    9726                         case 'ccsid858':
    9727                         case 'cp858':
    9728                         case 'ibm858':
    9729                         case 'pcmultilingual850euro':
    9730                                 return 'IBM00858';
    9731 
    9732                         case 'ccsid924':
    9733                         case 'cp924':
    9734                         case 'ebcdiclatin9euro':
    9735                         case 'ibm924':
    9736                                 return 'IBM00924';
    9737 
    9738                         case 'ccsid1140':
    9739                         case 'cp1140':
    9740                         case 'ebcdicus37euro':
    9741                         case 'ibm1140':
    9742                                 return 'IBM01140';
    9743 
    9744                         case 'ccsid1141':
    9745                         case 'cp1141':
    9746                         case 'ebcdicde273euro':
    9747                         case 'ibm1141':
    9748                                 return 'IBM01141';
    9749 
    9750                         case 'ccsid1142':
    9751                         case 'cp1142':
    9752                         case 'ebcdicdk277euro':
    9753                         case 'ebcdicno277euro':
    9754                         case 'ibm1142':
    9755                                 return 'IBM01142';
    9756 
    9757                         case 'ccsid1143':
    9758                         case 'cp1143':
    9759                         case 'ebcdicfi278euro':
    9760                         case 'ebcdicse278euro':
    9761                         case 'ibm1143':
    9762                                 return 'IBM01143';
    9763 
    9764                         case 'ccsid1144':
    9765                         case 'cp1144':
    9766                         case 'ebcdicit280euro':
    9767                         case 'ibm1144':
    9768                                 return 'IBM01144';
    9769 
    9770                         case 'ccsid1145':
    9771                         case 'cp1145':
    9772                         case 'ebcdices284euro':
    9773                         case 'ibm1145':
    9774                                 return 'IBM01145';
    9775 
    9776                         case 'ccsid1146':
    9777                         case 'cp1146':
    9778                         case 'ebcdicgb285euro':
    9779                         case 'ibm1146':
    9780                                 return 'IBM01146';
    9781 
    9782                         case 'ccsid1147':
    9783                         case 'cp1147':
    9784                         case 'ebcdicfr297euro':
    9785                         case 'ibm1147':
    9786                                 return 'IBM01147';
    9787 
    9788                         case 'ccsid1148':
    9789                         case 'cp1148':
    9790                         case 'ebcdicinternational500euro':
    9791                         case 'ibm1148':
    9792                                 return 'IBM01148';
    9793 
    9794                         case 'ccsid1149':
    9795                         case 'cp1149':
    9796                         case 'ebcdicis871euro':
    9797                         case 'ibm1149':
    9798                                 return 'IBM01149';
    9799 
    98009766                        case 'cp37':
    98019767                        case 'csibm37':
     
    99459911                                return 'IBM857';
    99469912
     9913                        case 'ccsid858':
     9914                        case 'cp858':
     9915                        case 'ibm858':
     9916                        case 'pcmultilingual850euro':
     9917                                return 'IBM00858';
     9918
    99479919                        case '860':
    99489920                        case 'cp860':
     
    1004710019                                return 'IBM918';
    1004810020
     10021                        case 'ccsid924':
     10022                        case 'cp924':
     10023                        case 'ebcdiclatin9euro':
     10024                        case 'ibm924':
     10025                                return 'IBM00924';
     10026
    1004910027                        case 'cp1026':
    1005010028                        case 'csibm1026':
     
    1005410032                        case 'ibm1047':
    1005510033                                return 'IBM1047';
     10034
     10035                        case 'ccsid1140':
     10036                        case 'cp1140':
     10037                        case 'ebcdicus37euro':
     10038                        case 'ibm1140':
     10039                                return 'IBM01140';
     10040
     10041                        case 'ccsid1141':
     10042                        case 'cp1141':
     10043                        case 'ebcdicde273euro':
     10044                        case 'ibm1141':
     10045                                return 'IBM01141';
     10046
     10047                        case 'ccsid1142':
     10048                        case 'cp1142':
     10049                        case 'ebcdicdk277euro':
     10050                        case 'ebcdicno277euro':
     10051                        case 'ibm1142':
     10052                                return 'IBM01142';
     10053
     10054                        case 'ccsid1143':
     10055                        case 'cp1143':
     10056                        case 'ebcdicfi278euro':
     10057                        case 'ebcdicse278euro':
     10058                        case 'ibm1143':
     10059                                return 'IBM01143';
     10060
     10061                        case 'ccsid1144':
     10062                        case 'cp1144':
     10063                        case 'ebcdicit280euro':
     10064                        case 'ibm1144':
     10065                                return 'IBM01144';
     10066
     10067                        case 'ccsid1145':
     10068                        case 'cp1145':
     10069                        case 'ebcdices284euro':
     10070                        case 'ibm1145':
     10071                                return 'IBM01145';
     10072
     10073                        case 'ccsid1146':
     10074                        case 'cp1146':
     10075                        case 'ebcdicgb285euro':
     10076                        case 'ibm1146':
     10077                                return 'IBM01146';
     10078
     10079                        case 'ccsid1147':
     10080                        case 'cp1147':
     10081                        case 'ebcdicfr297euro':
     10082                        case 'ibm1147':
     10083                                return 'IBM01147';
     10084
     10085                        case 'ccsid1148':
     10086                        case 'cp1148':
     10087                        case 'ebcdicinternational500euro':
     10088                        case 'ibm1148':
     10089                                return 'IBM01148';
     10090
     10091                        case 'ccsid1149':
     10092                        case 'cp1149':
     10093                        case 'ebcdicis871euro':
     10094                        case 'ibm1149':
     10095                                return 'IBM01149';
    1005610096
    1005710097                        case 'csiso143iecp271':
     
    1059610636                        case 'sen850200c':
    1059710637                                return 'SEN_850200_C';
    10598 
    10599                         case 'csshiftjis':
    10600                         case 'mskanji':
    10601                         case 'shiftjis':
    10602                                 return 'Shift_JIS';
    1060310638
    1060410639                        case 'csiso102t617bit':
     
    1070010735                                return 'VISCII';
    1070110736
     10737                        case 'csshiftjis':
    1070210738                        case 'cswindows31j':
     10739                        case 'mskanji':
     10740                        case 'shiftjis':
    1070310741                        case 'windows31j':
    1070410742                                return 'Windows-31J';
     
    1136011398}
    1136111399                <?php
     11400        }
     11401
     11402
     11403
     11404        /**
     11405         * Format debugging information
     11406         */
     11407        function debug($sp)
     11408        {
     11409                $info = 'SimplePie ' . SIMPLEPIE_VERSION . ' Build ' . SIMPLEPIE_BUILD . "\n";
     11410                $info .= 'PHP ' . PHP_VERSION . "\n";
     11411                if ($sp->error() !== null)
     11412                {
     11413                        $info .= 'Error occurred: ' . $sp->error() . "\n";
     11414                }
     11415                else
     11416                {
     11417                        $info .= "No error found.\n";
     11418                }
     11419                $info .= "Extensions:\n";
     11420                $extensions = array('pcre', 'curl', 'zlib', 'mbstring', 'iconv', 'xmlreader', 'xml');
     11421                foreach ($extensions as $ext)
     11422                {
     11423                        if (extension_loaded($ext))
     11424                        {
     11425                                $info .= "    $ext loaded\n";
     11426                                switch ($ext)
     11427                                {
     11428                                        case 'pcre':
     11429                                                $info .= '      Version ' . PCRE_VERSION . "\n";
     11430                                                break;
     11431                                        case 'curl':
     11432                                                $version = curl_version();
     11433                                                $info .= '      Version ' . $version['version'] . "\n";
     11434                                                break;
     11435                                        case 'mbstring':
     11436                                                $info .= '      Overloading: ' . mb_get_info('func_overload') . "\n";
     11437                                                break;
     11438                                        case 'iconv':
     11439                                                $info .= '      Version ' . ICONV_VERSION . "\n";
     11440                                                break;
     11441                                        case 'xml':
     11442                                                $info .= '      Version ' . LIBXML_DOTTED_VERSION . "\n";
     11443                                                break;
     11444                                }
     11445                        }
     11446                        else
     11447                        {
     11448                                $info .= "    $ext not loaded\n";
     11449                        }
     11450                }
     11451                return $info;
    1136211452        }
    1136311453}
     
    1183211922         * Replace invalid character with percent encoding
    1183311923         *
    11834          * @access private
    1183511924         * @param string $string Input string
    1183611925         * @param string $valid_chars Valid characters
     
    1183811927         * @return string
    1183911928         */
    11840         function replace_invalid_with_pct_encoding($string, $valid_chars, $case = SIMPLEPIE_SAME_CASE)
    11841         {
     11929        function replace_invalid_with_pct_encoding($string, $valid_chars, $case = SIMPLEPIE_SAME_CASE, $iprivate = false)
     11930        {
     11931                // Normalize as many pct-encoded sections as possible
     11932                $string = preg_replace_callback('/(?:%[A-Fa-f0-9]{2})+/', array(&$this, 'remove_iunreserved_percent_encoded'), $string);
     11933
     11934                // Replace invalid percent characters
     11935                $string = preg_replace('/%(?![A-Fa-f0-9]{2})/', '%25', $string);
     11936
     11937                // Add unreserved and % to $valid_chars (the latter is safe because all
     11938                // pct-encoded sections are now valid).
     11939                $valid_chars .= 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~%';
     11940
     11941                // Now replace any bytes that aren't allowed with their pct-encoded versions
     11942                $position = 0;
     11943                $strlen = strlen($string);
     11944                while (($position += strspn($string, $valid_chars, $position)) < $strlen)
     11945                {
     11946                        $value = ord($string[$position]);
     11947
     11948                        // Start position
     11949                        $start = $position;
     11950
     11951                        // By default we are valid
     11952                        $valid = true;
     11953
     11954                        // No one byte sequences are valid due to the while.
     11955                        // Two byte sequence:
     11956                        if (($value & 0xE0) === 0xC0)
     11957                        {
     11958                                $character = ($value & 0x1F) << 6;
     11959                                $length = 2;
     11960                                $remaining = 1;
     11961                        }
     11962                        // Three byte sequence:
     11963                        elseif (($value & 0xF0) === 0xE0)
     11964                        {
     11965                                $character = ($value & 0x0F) << 12;
     11966                                $length = 3;
     11967                                $remaining = 2;
     11968                        }
     11969                        // Four byte sequence:
     11970                        elseif (($value & 0xF8) === 0xF0)
     11971                        {
     11972                                $character = ($value & 0x07) << 18;
     11973                                $length = 4;
     11974                                $remaining = 3;
     11975                        }
     11976                        // Invalid byte:
     11977                        else
     11978                        {
     11979                                $valid = false;
     11980                                $length = 1;
     11981                                $remaining = 0;
     11982                        }
     11983
     11984                        if ($remaining)
     11985                        {
     11986                                if ($position + $length <= $strlen)
     11987                                {
     11988                                        for ($position++; $remaining; $position++)
     11989                                        {
     11990                                                $value = ord($string[$position]);
     11991
     11992                                                // Check that the byte is valid, then add it to the character:
     11993                                                if (($value & 0xC0) === 0x80)
     11994                                                {
     11995                                                        $character |= ($value & 0x3F) << (--$remaining * 6);
     11996                                                }
     11997                                                // If it is invalid, count the sequence as invalid and reprocess the current byte:
     11998                                                else
     11999                                                {
     12000                                                        $valid = false;
     12001                                                        $position--;
     12002                                                        break;
     12003                                                }
     12004                                        }
     12005                                }
     12006                                else
     12007                                {
     12008                                        $position = $strlen - 1;
     12009                                        $valid = false;
     12010                                }
     12011                        }
     12012
     12013                        // Percent encode anything invalid or not in ucschar
     12014                        if (
     12015                                // Invalid sequences
     12016                                !$valid
     12017                                // Non-shortest form sequences are invalid
     12018                                || $length > 1 && $character <= 0x7F
     12019                                || $length > 2 && $character <= 0x7FF
     12020                                || $length > 3 && $character <= 0xFFFF
     12021                                // Outside of range of ucschar codepoints
     12022                                // Noncharacters
     12023                                || ($character & 0xFFFE) === 0xFFFE
     12024                                || $character >= 0xFDD0 && $character <= 0xFDEF
     12025                                || (
     12026                                        // Everything else not in ucschar
     12027                                           $character > 0xD7FF && $character < 0xF900
     12028                                        || $character < 0xA0
     12029                                        || $character > 0xEFFFD
     12030                                )
     12031                                && (
     12032                                        // Everything not in iprivate, if it applies
     12033                                           !$iprivate
     12034                                        || $character < 0xE000
     12035                                        || $character > 0x10FFFD
     12036                                )
     12037                        )
     12038                        {
     12039                                // If we were a character, pretend we weren't, but rather an error.
     12040                                if ($valid)
     12041                                        $position--;
     12042
     12043                                for ($j = $start; $j <= $position; $j++)
     12044                                {
     12045                                        $string = substr_replace($string, sprintf('%%%02X', ord($string[$j])), $j, 1);
     12046                                        $j += 2;
     12047                                        $position += 2;
     12048                                        $strlen += 2;
     12049                                }
     12050                        }
     12051                }
     12052
    1184212053                // Normalise case
    1184312054                if ($case & SIMPLEPIE_LOWERCASE)
     
    1185012061                }
    1185112062
    11852                 // Store position and string length (to avoid constantly recalculating this)
    11853                 $position = 0;
    11854                 $strlen = strlen($string);
    11855 
    11856                 // Loop as long as we have invalid characters, advancing the position to the next invalid character
    11857                 while (($position += strspn($string, $valid_chars, $position)) < $strlen)
    11858                 {
    11859                         // If we have a % character
    11860                         if ($string[$position] === '%')
    11861                         {
    11862                                 // If we have a pct-encoded section
    11863                                 if ($position + 2 < $strlen && strspn($string, '0123456789ABCDEFabcdef', $position + 1, 2) === 2)
    11864                                 {
    11865                                         // Get the the represented character
    11866                                         $chr = chr(hexdec(substr($string, $position + 1, 2)));
    11867 
    11868                                         // If the character is valid, replace the pct-encoded with the actual character while normalising case
    11869                                         if (strpos($valid_chars, $chr) !== false)
     12063                return $string;
     12064        }
     12065
     12066        /**
     12067         * Callback function for preg_replace_callback.
     12068         *
     12069         * Removes sequences of percent encoded bytes that represent UTF-8
     12070         * encoded characters in iunreserved
     12071         *
     12072         * @access private
     12073         * @param array $match PCRE match
     12074         * @return string Replacement
     12075         */
     12076        function remove_iunreserved_percent_encoded($match)
     12077        {
     12078                // As we just have valid percent encoded sequences we can just explode
     12079                // and ignore the first member of the returned array (an empty string).
     12080                $bytes = explode('%', $match[0]);
     12081
     12082                // Initialize the new string (this is what will be returned) and that
     12083                // there are no bytes remaining in the current sequence (unsurprising
     12084                // at the first byte!).
     12085                $string = '';
     12086                $remaining = 0;
     12087
     12088                // Loop over each and every byte, and set $value to its value
     12089                for ($i = 1, $len = count($bytes); $i < $len; $i++)
     12090                {
     12091                        $value = hexdec($bytes[$i]);
     12092
     12093                        // If we're the first byte of sequence:
     12094                        if (!$remaining)
     12095                        {
     12096                                // Start position
     12097                                $start = $i;
     12098
     12099                                // By default we are valid
     12100                                $valid = true;
     12101
     12102                                // One byte sequence:
     12103                                if ($value <= 0x7F)
     12104                                {
     12105                                        $character = $value;
     12106                                        $length = 1;
     12107                                }
     12108                                // Two byte sequence:
     12109                                elseif (($value & 0xE0) === 0xC0)
     12110                                {
     12111                                        $character = ($value & 0x1F) << 6;
     12112                                        $length = 2;
     12113                                        $remaining = 1;
     12114                                }
     12115                                // Three byte sequence:
     12116                                elseif (($value & 0xF0) === 0xE0)
     12117                                {
     12118                                        $character = ($value & 0x0F) << 12;
     12119                                        $length = 3;
     12120                                        $remaining = 2;
     12121                                }
     12122                                // Four byte sequence:
     12123                                elseif (($value & 0xF8) === 0xF0)
     12124                                {
     12125                                        $character = ($value & 0x07) << 18;
     12126                                        $length = 4;
     12127                                        $remaining = 3;
     12128                                }
     12129                                // Invalid byte:
     12130                                else
     12131                                {
     12132                                        $valid = false;
     12133                                        $remaining = 0;
     12134                                }
     12135                        }
     12136                        // Continuation byte:
     12137                        else
     12138                        {
     12139                                // Check that the byte is valid, then add it to the character:
     12140                                if (($value & 0xC0) === 0x80)
     12141                                {
     12142                                        $remaining--;
     12143                                        $character |= ($value & 0x3F) << ($remaining * 6);
     12144                                }
     12145                                // If it is invalid, count the sequence as invalid and reprocess the current byte as the start of a sequence:
     12146                                else
     12147                                {
     12148                                        $valid = false;
     12149                                        $remaining = 0;
     12150                                        $i--;
     12151                                }
     12152                        }
     12153
     12154                        // If we've reached the end of the current byte sequence, append it to Unicode::$data
     12155                        if (!$remaining)
     12156                        {
     12157                                // Percent encode anything invalid or not in iunreserved
     12158                                if (
     12159                                        // Invalid sequences
     12160                                        !$valid
     12161                                        // Non-shortest form sequences are invalid
     12162                                        || $length > 1 && $character <= 0x7F
     12163                                        || $length > 2 && $character <= 0x7FF
     12164                                        || $length > 3 && $character <= 0xFFFF
     12165                                        // Outside of range of iunreserved codepoints
     12166                                        || $character < 0x2D
     12167                                        || $character > 0xEFFFD
     12168                                        // Noncharacters
     12169                                        || ($character & 0xFFFE) === 0xFFFE
     12170                                        || $character >= 0xFDD0 && $character <= 0xFDEF
     12171                                        // Everything else not in iunreserved (this is all BMP)
     12172                                        || $character === 0x2F
     12173                                        || $character > 0x39 && $character < 0x41
     12174                                        || $character > 0x5A && $character < 0x61
     12175                                        || $character > 0x7A && $character < 0x7E
     12176                                        || $character > 0x7E && $character < 0xA0
     12177                                        || $character > 0xD7FF && $character < 0xF900
     12178                                )
     12179                                {
     12180                                        for ($j = $start; $j <= $i; $j++)
    1187012181                                        {
    11871                                                 if ($case & SIMPLEPIE_LOWERCASE)
    11872                                                 {
    11873                                                         $chr = strtolower($chr);
    11874                                                 }
    11875                                                 elseif ($case & SIMPLEPIE_UPPERCASE)
    11876                                                 {
    11877                                                         $chr = strtoupper($chr);
    11878                                                 }
    11879                                                 $string = substr_replace($string, $chr, $position, 3);
    11880                                                 $strlen -= 2;
    11881                                                 $position++;
     12182                                                $string .= '%' . strtoupper($bytes[$j]);
    1188212183                                        }
    11883 
    11884                                         // Otherwise just normalise the pct-encoded to uppercase
    11885                                         else
     12184                                }
     12185                                else
     12186                                {
     12187                                        for ($j = $start; $j <= $i; $j++)
    1188612188                                        {
    11887                                                 $string = substr_replace($string, strtoupper(substr($string, $position + 1, 2)), $position + 1, 2);
    11888                                                 $position += 3;
     12189                                                $string .= chr(hexdec($bytes[$j]));
    1188912190                                        }
    1189012191                                }
    11891                                 // If we don't have a pct-encoded section, just replace the % with its own esccaped form
    11892                                 else
    11893                                 {
    11894                                         $string = substr_replace($string, '%25', $position, 1);
    11895                                         $strlen += 2;
    11896                                         $position += 3;
    11897                                 }
    11898                         }
    11899                         // If we have an invalid character, change into its pct-encoded form
    11900                         else
    11901                         {
    11902                                 $replacement = sprintf("%%%02X", ord($string[$position]));
    11903                                 $string = str_replace($string[$position], $replacement, $string);
    11904                                 $strlen = strlen($string);
    11905                         }
    11906                 }
     12192                        }
     12193                }
     12194
     12195                // If we have any bytes left over they are invalid (i.e., we are
     12196                // mid-way through a multi-byte sequence)
     12197                if ($remaining)
     12198                {
     12199                        for ($j = $start; $j < $len; $j++)
     12200                        {
     12201                                $string .= '%' . strtoupper($bytes[$j]);
     12202                        }
     12203                }
     12204
    1190712205                return $string;
    1190812206        }
     
    1213112429                else
    1213212430                {
    12133                         $this->query = $this->replace_invalid_with_pct_encoding($query, 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~!$&\'()*+,;=:@/?');
     12431                        $this->query = $this->replace_invalid_with_pct_encoding($query, 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~!$\'()*+,;:@/?&=');
    1213412432                }
    1213512433                $this->valid[__FUNCTION__] = true;
     
    1393414232                else
    1393514233                {
    13936                         $this->state = 'standalone_name';
     14234                        $this->state = false;
    1393714235                }
    1393814236        }
     
    1394814246                else
    1394914247                {
    13950                         $this->state = false;
     14248                        $this->state = 'standalone_name';
    1395114249                }
    1395214250        }
     
    1442614724                                                if ($xml->namespaceURI !== '')
    1442714725                                                {
    14428                                                         $tagName = "{$xml->namespaceURI}{$this->separator}{$xml->localName}";
     14726                                                        $tagName = $xml->namespaceURI . $this->separator . $xml->localName;
    1442914727                                                }
    1443014728                                                else
     
    1443814736                                                if ($xml->namespaceURI !== '')
    1443914737                                                {
    14440                                                         $tagName = "{$xml->namespaceURI}{$this->separator}{$xml->localName}";
     14738                                                        $tagName = $xml->namespaceURI . $this->separator . $xml->localName;
    1444114739                                                }
    1444214740                                                else
     
    1444914747                                                        if ($xml->namespaceURI !== '')
    1445014748                                                        {
    14451                                                                 $attrName = "{$xml->namespaceURI}{$this->separator}{$xml->localName}";
     14749                                                                $attrName = $xml->namespaceURI . $this->separator . $xml->localName;
    1445214750                                                        }
    1445314751                                                        else
     
    1491415212                                                                        else
    1491515213                                                                        {
    14916                                                                                 trigger_error("$this->cache_location is not writeable", E_USER_WARNING);
     15214                                                                                trigger_error("$this->cache_location is not writeable. Make sure you've set the correct relative or absolute path, and that the location is server-writable.", E_USER_WARNING);
    1491715215                                                                        }
    1491815216                                                                }
Note: See TracChangeset for help on using the changeset viewer.