wp/wp-includes/SimplePie/Sanitize.php
author ymh <ymh.work@gmail.com>
Tue, 27 Sep 2022 16:37:53 +0200
changeset 19 3d72ae0968f4
parent 16 a86126ab1dd4
permissions -rw-r--r--
upgrade wordpress to 6.0.2
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     1
<?php
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     2
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     3
 * SimplePie
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     4
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     5
 * A PHP-Based RSS and Atom Feed Framework.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     6
 * Takes the hard work out of managing a complete RSS/Atom solution.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     7
 *
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
     8
 * Copyright (c) 2004-2016, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     9
 * All rights reserved.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    10
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    11
 * Redistribution and use in source and binary forms, with or without modification, are
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    12
 * permitted provided that the following conditions are met:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    13
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    14
 * 	* Redistributions of source code must retain the above copyright notice, this list of
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    15
 * 	  conditions and the following disclaimer.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    16
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    17
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    18
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    19
 * 	  provided with the distribution.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    20
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    21
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    22
 * 	  to endorse or promote products derived from this software without specific prior
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    23
 * 	  written permission.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    24
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    25
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    26
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    27
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    28
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    29
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    30
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    31
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    32
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    33
 * POSSIBILITY OF SUCH DAMAGE.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    34
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    35
 * @package SimplePie
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
    36
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    37
 * @author Ryan Parman
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
    38
 * @author Sam Sneddon
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    39
 * @author Ryan McCue
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    40
 * @link http://simplepie.org/ SimplePie
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    41
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    42
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    43
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    44
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    45
 * Used for data cleanup and post-processing
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    46
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    47
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    48
 * This class can be overloaded with {@see SimplePie::set_sanitize_class()}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    49
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    50
 * @package SimplePie
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    51
 * @todo Move to using an actual HTML parser (this will allow tags to be properly stripped, and to switch between HTML and XHTML), this will also make it easier to shorten a string while preserving HTML tags
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    52
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    53
class SimplePie_Sanitize
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    54
{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    55
	// Private vars
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    56
	var $base;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    57
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    58
	// Options
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    59
	var $remove_div = true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    60
	var $image_handler = '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    61
	var $strip_htmltags = array('base', 'blink', 'body', 'doctype', 'embed', 'font', 'form', 'frame', 'frameset', 'html', 'iframe', 'input', 'marquee', 'meta', 'noscript', 'object', 'param', 'script', 'style');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    62
	var $encode_instead_of_strip = false;
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
    63
	var $strip_attributes = array('bgsound', 'expr', 'id', 'style', 'onclick', 'onerror', 'onfinish', 'onmouseover', 'onmouseout', 'onfocus', 'onblur', 'lowsrc', 'dynsrc');
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
    64
	var $add_attributes = array('audio' => array('preload' => 'none'), 'iframe' => array('sandbox' => 'allow-scripts allow-same-origin'), 'video' => array('preload' => 'none'));
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    65
	var $strip_comments = false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    66
	var $output_encoding = 'UTF-8';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    67
	var $enable_cache = true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    68
	var $cache_location = './cache';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    69
	var $cache_name_function = 'md5';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    70
	var $timeout = 10;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    71
	var $useragent = '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    72
	var $force_fsockopen = false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    73
	var $replace_url_attributes = null;
19
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
    74
	var $registry;
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
    75
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
    76
	/**
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
    77
	 * List of domains for which to force HTTPS.
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
    78
	 * @see SimplePie_Sanitize::set_https_domains()
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
    79
	 * Array is a tree split at DNS levels. Example:
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
    80
	 * array('biz' => true, 'com' => array('example' => true), 'net' => array('example' => array('www' => true)))
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
    81
	 */
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
    82
	var $https_domains = array();
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    83
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    84
	public function __construct()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    85
	{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    86
		// Set defaults
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    87
		$this->set_url_replacements(null);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    88
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    89
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    90
	public function remove_div($enable = true)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    91
	{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    92
		$this->remove_div = (bool) $enable;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    93
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    94
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    95
	public function set_image_handler($page = false)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    96
	{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    97
		if ($page)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    98
		{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    99
			$this->image_handler = (string) $page;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   100
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   101
		else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   102
		{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   103
			$this->image_handler = false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   104
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   105
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   106
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   107
	public function set_registry(SimplePie_Registry $registry)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   108
	{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   109
		$this->registry = $registry;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   110
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   111
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   112
	public function pass_cache_data($enable_cache = true, $cache_location = './cache', $cache_name_function = 'md5', $cache_class = 'SimplePie_Cache')
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   113
	{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   114
		if (isset($enable_cache))
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   115
		{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   116
			$this->enable_cache = (bool) $enable_cache;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   117
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   118
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   119
		if ($cache_location)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   120
		{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   121
			$this->cache_location = (string) $cache_location;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   122
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   123
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   124
		if ($cache_name_function)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   125
		{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   126
			$this->cache_name_function = (string) $cache_name_function;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   127
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   128
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   129
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   130
	public function pass_file_data($file_class = 'SimplePie_File', $timeout = 10, $useragent = '', $force_fsockopen = false)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   131
	{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   132
		if ($timeout)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   133
		{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   134
			$this->timeout = (string) $timeout;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   135
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   136
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   137
		if ($useragent)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   138
		{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   139
			$this->useragent = (string) $useragent;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   140
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   141
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   142
		if ($force_fsockopen)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   143
		{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   144
			$this->force_fsockopen = (string) $force_fsockopen;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   145
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   146
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   147
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   148
	public function strip_htmltags($tags = array('base', 'blink', 'body', 'doctype', 'embed', 'font', 'form', 'frame', 'frameset', 'html', 'iframe', 'input', 'marquee', 'meta', 'noscript', 'object', 'param', 'script', 'style'))
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   149
	{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   150
		if ($tags)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   151
		{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   152
			if (is_array($tags))
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   153
			{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   154
				$this->strip_htmltags = $tags;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   155
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   156
			else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   157
			{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   158
				$this->strip_htmltags = explode(',', $tags);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   159
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   160
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   161
		else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   162
		{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   163
			$this->strip_htmltags = false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   164
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   165
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   166
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   167
	public function encode_instead_of_strip($encode = false)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   168
	{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   169
		$this->encode_instead_of_strip = (bool) $encode;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   170
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   171
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   172
	public function strip_attributes($attribs = array('bgsound', 'expr', 'id', 'style', 'onclick', 'onerror', 'onfinish', 'onmouseover', 'onmouseout', 'onfocus', 'onblur', 'lowsrc', 'dynsrc'))
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   173
	{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   174
		if ($attribs)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   175
		{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   176
			if (is_array($attribs))
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   177
			{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   178
				$this->strip_attributes = $attribs;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   179
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   180
			else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   181
			{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   182
				$this->strip_attributes = explode(',', $attribs);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   183
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   184
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   185
		else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   186
		{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   187
			$this->strip_attributes = false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   188
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   189
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   190
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   191
	public function add_attributes($attribs = array('audio' => array('preload' => 'none'), 'iframe' => array('sandbox' => 'allow-scripts allow-same-origin'), 'video' => array('preload' => 'none')))
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   192
	{
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   193
		if ($attribs)
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   194
		{
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   195
			if (is_array($attribs))
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   196
			{
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   197
				$this->add_attributes = $attribs;
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   198
			}
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   199
			else
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   200
			{
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   201
				$this->add_attributes = explode(',', $attribs);
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   202
			}
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   203
		}
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   204
		else
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   205
		{
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   206
			$this->add_attributes = false;
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   207
		}
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   208
	}
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   209
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   210
	public function strip_comments($strip = false)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   211
	{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   212
		$this->strip_comments = (bool) $strip;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   213
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   214
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   215
	public function set_output_encoding($encoding = 'UTF-8')
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   216
	{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   217
		$this->output_encoding = (string) $encoding;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   218
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   219
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   220
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   221
	 * Set element/attribute key/value pairs of HTML attributes
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   222
	 * containing URLs that need to be resolved relative to the feed
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   223
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   224
	 * Defaults to |a|@href, |area|@href, |blockquote|@cite, |del|@cite,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   225
	 * |form|@action, |img|@longdesc, |img|@src, |input|@src, |ins|@cite,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   226
	 * |q|@cite
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   227
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   228
	 * @since 1.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   229
	 * @param array|null $element_attribute Element/attribute key/value pairs, null for default
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   230
	 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   231
	public function set_url_replacements($element_attribute = null)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   232
	{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   233
		if ($element_attribute === null)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   234
		{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   235
			$element_attribute = array(
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   236
				'a' => 'href',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   237
				'area' => 'href',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   238
				'blockquote' => 'cite',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   239
				'del' => 'cite',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   240
				'form' => 'action',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   241
				'img' => array(
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   242
					'longdesc',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   243
					'src'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   244
				),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   245
				'input' => 'src',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   246
				'ins' => 'cite',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   247
				'q' => 'cite'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   248
			);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   249
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   250
		$this->replace_url_attributes = (array) $element_attribute;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   251
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   252
19
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
   253
	/**
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
   254
	 * Set the list of domains for which to force HTTPS.
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
   255
	 * @see SimplePie_Misc::https_url()
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
   256
	 * Example array('biz', 'example.com', 'example.org', 'www.example.net');
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
   257
	 */
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
   258
	public function set_https_domains($domains)
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
   259
	{
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
   260
		$this->https_domains = array();
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
   261
		foreach ($domains as $domain)
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
   262
		{
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
   263
			$domain = trim($domain, ". \t\n\r\0\x0B");
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
   264
			$segments = array_reverse(explode('.', $domain));
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
   265
			$node =& $this->https_domains;
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
   266
			foreach ($segments as $segment)
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
   267
			{//Build a tree
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
   268
				if ($node === true)
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
   269
				{
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
   270
					break;
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
   271
				}
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
   272
				if (!isset($node[$segment]))
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
   273
				{
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
   274
					$node[$segment] = array();
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
   275
				}
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
   276
				$node =& $node[$segment];
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
   277
			}
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
   278
			$node = true;
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
   279
		}
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
   280
	}
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
   281
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
   282
	/**
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
   283
	 * Check if the domain is in the list of forced HTTPS.
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
   284
	 */
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
   285
	protected function is_https_domain($domain)
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
   286
	{
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
   287
		$domain = trim($domain, '. ');
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
   288
		$segments = array_reverse(explode('.', $domain));
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
   289
		$node =& $this->https_domains;
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
   290
		foreach ($segments as $segment)
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
   291
		{//Explore the tree
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
   292
			if (isset($node[$segment]))
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
   293
			{
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
   294
				$node =& $node[$segment];
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
   295
			}
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
   296
			else
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
   297
			{
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
   298
				break;
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
   299
			}
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
   300
		}
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
   301
		return $node === true;
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
   302
	}
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
   303
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
   304
	/**
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
   305
	 * Force HTTPS for selected Web sites.
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
   306
	 */
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
   307
	public function https_url($url)
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
   308
	{
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
   309
		return (strtolower(substr($url, 0, 7)) === 'http://') &&
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
   310
			$this->is_https_domain(parse_url($url, PHP_URL_HOST)) ?
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
   311
			substr_replace($url, 's', 4, 0) :	//Add the 's' to HTTPS
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
   312
			$url;
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
   313
	}
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
   314
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   315
	public function sanitize($data, $type, $base = '')
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   316
	{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   317
		$data = trim($data);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   318
		if ($data !== '' || $type & SIMPLEPIE_CONSTRUCT_IRI)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   319
		{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   320
			if ($type & SIMPLEPIE_CONSTRUCT_MAYBE_HTML)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   321
			{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   322
				if (preg_match('/(&(#(x[0-9a-fA-F]+|[0-9]+)|[a-zA-Z0-9]+)|<\/[A-Za-z][^\x09\x0A\x0B\x0C\x0D\x20\x2F\x3E]*' . SIMPLEPIE_PCRE_HTML_ATTRIBUTE . '>)/', $data))
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   323
				{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   324
					$type |= SIMPLEPIE_CONSTRUCT_HTML;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   325
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   326
				else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   327
				{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   328
					$type |= SIMPLEPIE_CONSTRUCT_TEXT;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   329
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   330
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   331
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   332
			if ($type & SIMPLEPIE_CONSTRUCT_BASE64)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   333
			{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   334
				$data = base64_decode($data);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   335
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   336
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   337
			if ($type & (SIMPLEPIE_CONSTRUCT_HTML | SIMPLEPIE_CONSTRUCT_XHTML))
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   338
			{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   339
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   340
				if (!class_exists('DOMDocument'))
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   341
				{
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   342
					throw new SimplePie_Exception('DOMDocument not found, unable to use sanitizer');
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   343
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   344
				$document = new DOMDocument();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   345
				$document->encoding = 'UTF-8';
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   346
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   347
				$data = $this->preprocess($data, $type);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   348
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   349
				set_error_handler(array('SimplePie_Misc', 'silence_errors'));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   350
				$document->loadHTML($data);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   351
				restore_error_handler();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   352
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   353
				$xpath = new DOMXPath($document);
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   354
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   355
				// Strip comments
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   356
				if ($this->strip_comments)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   357
				{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   358
					$comments = $xpath->query('//comment()');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   359
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   360
					foreach ($comments as $comment)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   361
					{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   362
						$comment->parentNode->removeChild($comment);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   363
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   364
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   365
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   366
				// Strip out HTML tags and attributes that might cause various security problems.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   367
				// Based on recommendations by Mark Pilgrim at:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   368
				// http://diveintomark.org/archives/2003/06/12/how_to_consume_rss_safely
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   369
				if ($this->strip_htmltags)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   370
				{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   371
					foreach ($this->strip_htmltags as $tag)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   372
					{
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   373
						$this->strip_tag($tag, $document, $xpath, $type);
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   374
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   375
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   376
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   377
				if ($this->strip_attributes)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   378
				{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   379
					foreach ($this->strip_attributes as $attrib)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   380
					{
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   381
						$this->strip_attr($attrib, $xpath);
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   382
					}
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   383
				}
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   384
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   385
				if ($this->add_attributes)
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   386
				{
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   387
					foreach ($this->add_attributes as $tag => $valuePairs)
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   388
					{
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   389
						$this->add_attr($tag, $valuePairs, $document);
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   390
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   391
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   392
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   393
				// Replace relative URLs
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   394
				$this->base = $base;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   395
				foreach ($this->replace_url_attributes as $element => $attributes)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   396
				{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   397
					$this->replace_urls($document, $element, $attributes);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   398
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   399
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   400
				// If image handling (caching, etc.) is enabled, cache and rewrite all the image tags.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   401
				if (isset($this->image_handler) && ((string) $this->image_handler) !== '' && $this->enable_cache)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   402
				{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   403
					$images = $document->getElementsByTagName('img');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   404
					foreach ($images as $img)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   405
					{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   406
						if ($img->hasAttribute('src'))
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   407
						{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   408
							$image_url = call_user_func($this->cache_name_function, $img->getAttribute('src'));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   409
							$cache = $this->registry->call('Cache', 'get_handler', array($this->cache_location, $image_url, 'spi'));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   410
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   411
							if ($cache->load())
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   412
							{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   413
								$img->setAttribute('src', $this->image_handler . $image_url);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   414
							}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   415
							else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   416
							{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   417
								$file = $this->registry->create('File', array($img->getAttribute('src'), $this->timeout, 5, array('X-FORWARDED-FOR' => $_SERVER['REMOTE_ADDR']), $this->useragent, $this->force_fsockopen));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   418
								$headers = $file->headers;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   419
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   420
								if ($file->success && ($file->method & SIMPLEPIE_FILE_SOURCE_REMOTE === 0 || ($file->status_code === 200 || $file->status_code > 206 && $file->status_code < 300)))
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   421
								{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   422
									if ($cache->save(array('headers' => $file->headers, 'body' => $file->body)))
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   423
									{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   424
										$img->setAttribute('src', $this->image_handler . $image_url);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   425
									}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   426
									else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   427
									{
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   428
										trigger_error("$this->cache_location is not writable. Make sure you've set the correct relative or absolute path, and that the location is server-writable.", E_USER_WARNING);
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   429
									}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   430
								}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   431
							}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   432
						}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   433
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   434
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   435
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   436
				// Get content node
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   437
				$div = $document->getElementsByTagName('body')->item(0)->firstChild;
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   438
				// Finally, convert to a HTML string
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   439
				$data = trim($document->saveHTML($div));
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   440
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   441
				if ($this->remove_div)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   442
				{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   443
					$data = preg_replace('/^<div' . SIMPLEPIE_PCRE_XML_ATTRIBUTE . '>/', '', $data);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   444
					$data = preg_replace('/<\/div>$/', '', $data);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   445
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   446
				else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   447
				{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   448
					$data = preg_replace('/^<div' . SIMPLEPIE_PCRE_XML_ATTRIBUTE . '>/', '<div>', $data);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   449
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   450
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   451
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   452
			if ($type & SIMPLEPIE_CONSTRUCT_IRI)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   453
			{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   454
				$absolute = $this->registry->call('Misc', 'absolutize_url', array($data, $base));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   455
				if ($absolute !== false)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   456
				{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   457
					$data = $absolute;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   458
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   459
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   460
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   461
			if ($type & (SIMPLEPIE_CONSTRUCT_TEXT | SIMPLEPIE_CONSTRUCT_IRI))
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   462
			{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   463
				$data = htmlspecialchars($data, ENT_COMPAT, 'UTF-8');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   464
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   465
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   466
			if ($this->output_encoding !== 'UTF-8')
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   467
			{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   468
				$data = $this->registry->call('Misc', 'change_encoding', array($data, 'UTF-8', $this->output_encoding));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   469
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   470
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   471
		return $data;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   472
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   473
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   474
	protected function preprocess($html, $type)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   475
	{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   476
		$ret = '';
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   477
		$html = preg_replace('%</?(?:html|body)[^>]*?'.'>%is', '', $html);
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   478
		if ($type & ~SIMPLEPIE_CONSTRUCT_XHTML)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   479
		{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   480
			// Atom XHTML constructs are wrapped with a div by default
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   481
			// Note: No protection if $html contains a stray </div>!
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   482
			$html = '<div>' . $html . '</div>';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   483
			$ret .= '<!DOCTYPE html>';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   484
			$content_type = 'text/html';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   485
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   486
		else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   487
		{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   488
			$ret .= '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   489
			$content_type = 'application/xhtml+xml';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   490
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   491
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   492
		$ret .= '<html><head>';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   493
		$ret .= '<meta http-equiv="Content-Type" content="' . $content_type . '; charset=utf-8" />';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   494
		$ret .= '</head><body>' . $html . '</body></html>';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   495
		return $ret;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   496
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   497
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   498
	public function replace_urls($document, $tag, $attributes)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   499
	{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   500
		if (!is_array($attributes))
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   501
		{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   502
			$attributes = array($attributes);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   503
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   504
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   505
		if (!is_array($this->strip_htmltags) || !in_array($tag, $this->strip_htmltags))
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   506
		{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   507
			$elements = $document->getElementsByTagName($tag);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   508
			foreach ($elements as $element)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   509
			{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   510
				foreach ($attributes as $attribute)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   511
				{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   512
					if ($element->hasAttribute($attribute))
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   513
					{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   514
						$value = $this->registry->call('Misc', 'absolutize_url', array($element->getAttribute($attribute), $this->base));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   515
						if ($value !== false)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   516
						{
19
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
   517
							$value = $this->https_url($value);
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   518
							$element->setAttribute($attribute, $value);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   519
						}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   520
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   521
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   522
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   523
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   524
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   525
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   526
	public function do_strip_htmltags($match)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   527
	{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   528
		if ($this->encode_instead_of_strip)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   529
		{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   530
			if (isset($match[4]) && !in_array(strtolower($match[1]), array('script', 'style')))
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   531
			{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   532
				$match[1] = htmlspecialchars($match[1], ENT_COMPAT, 'UTF-8');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   533
				$match[2] = htmlspecialchars($match[2], ENT_COMPAT, 'UTF-8');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   534
				return "&lt;$match[1]$match[2]&gt;$match[3]&lt;/$match[1]&gt;";
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   535
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   536
			else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   537
			{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   538
				return htmlspecialchars($match[0], ENT_COMPAT, 'UTF-8');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   539
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   540
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   541
		elseif (isset($match[4]) && !in_array(strtolower($match[1]), array('script', 'style')))
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   542
		{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   543
			return $match[4];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   544
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   545
		else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   546
		{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   547
			return '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   548
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   549
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   550
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   551
	protected function strip_tag($tag, $document, $xpath, $type)
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   552
	{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   553
		$elements = $xpath->query('body//' . $tag);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   554
		if ($this->encode_instead_of_strip)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   555
		{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   556
			foreach ($elements as $element)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   557
			{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   558
				$fragment = $document->createDocumentFragment();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   559
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   560
				// For elements which aren't script or style, include the tag itself
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   561
				if (!in_array($tag, array('script', 'style')))
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   562
				{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   563
					$text = '<' . $tag;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   564
					if ($element->hasAttributes())
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   565
					{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   566
						$attrs = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   567
						foreach ($element->attributes as $name => $attr)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   568
						{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   569
							$value = $attr->value;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   570
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   571
							// In XHTML, empty values should never exist, so we repeat the value
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   572
							if (empty($value) && ($type & SIMPLEPIE_CONSTRUCT_XHTML))
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   573
							{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   574
								$value = $name;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   575
							}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   576
							// For HTML, empty is fine
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   577
							elseif (empty($value) && ($type & SIMPLEPIE_CONSTRUCT_HTML))
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   578
							{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   579
								$attrs[] = $name;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   580
								continue;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   581
							}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   582
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   583
							// Standard attribute text
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   584
							$attrs[] = $name . '="' . $attr->value . '"';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   585
						}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   586
						$text .= ' ' . implode(' ', $attrs);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   587
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   588
					$text .= '>';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   589
					$fragment->appendChild(new DOMText($text));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   590
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   591
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   592
				$number = $element->childNodes->length;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   593
				for ($i = $number; $i > 0; $i--)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   594
				{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   595
					$child = $element->childNodes->item(0);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   596
					$fragment->appendChild($child);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   597
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   598
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   599
				if (!in_array($tag, array('script', 'style')))
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   600
				{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   601
					$fragment->appendChild(new DOMText('</' . $tag . '>'));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   602
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   603
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   604
				$element->parentNode->replaceChild($fragment, $element);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   605
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   606
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   607
			return;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   608
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   609
		elseif (in_array($tag, array('script', 'style')))
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   610
		{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   611
			foreach ($elements as $element)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   612
			{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   613
				$element->parentNode->removeChild($element);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   614
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   615
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   616
			return;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   617
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   618
		else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   619
		{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   620
			foreach ($elements as $element)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   621
			{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   622
				$fragment = $document->createDocumentFragment();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   623
				$number = $element->childNodes->length;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   624
				for ($i = $number; $i > 0; $i--)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   625
				{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   626
					$child = $element->childNodes->item(0);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   627
					$fragment->appendChild($child);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   628
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   629
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   630
				$element->parentNode->replaceChild($fragment, $element);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   631
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   632
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   633
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   634
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   635
	protected function strip_attr($attrib, $xpath)
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   636
	{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   637
		$elements = $xpath->query('//*[@' . $attrib . ']');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   638
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   639
		foreach ($elements as $element)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   640
		{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   641
			$element->removeAttribute($attrib);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   642
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   643
	}
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   644
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   645
	protected function add_attr($tag, $valuePairs, $document)
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   646
	{
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   647
		$elements = $document->getElementsByTagName($tag);
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   648
		foreach ($elements as $element)
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   649
		{
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   650
			foreach ($valuePairs as $attrib => $value)
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   651
			{
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   652
				$element->setAttribute($attrib, $value);
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   653
			}
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   654
		}
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   655
	}
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   656
}