wp/wp-includes/SimplePie/IRI.php
author ymh <ymh.work@gmail.com>
Mon, 08 Sep 2025 19:44:41 +0200
changeset 23 417f20492bf7
parent 16 a86126ab1dd4
permissions -rw-r--r--
Update Docker configuration and plugin versions - Upgrade MariaDB from 10.6 to 11 with auto-upgrade support - Add WordPress debug environment variable to FPM container - Update PHP-FPM Dockerfile base image - Update Include Mastodon Feed plugin with bug fixes and improvements - Update Portfolio plugin (v2.58) with latest translations and demo data enhancements - Remove old README.md from Mastodon Feed plugin 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
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
 * IRI parser/serialiser/normaliser
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    46
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    47
 * @package SimplePie
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    48
 * @subpackage HTTP
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
    49
 * @author Sam Sneddon
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    50
 * @author Steve Minutillo
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    51
 * @author Ryan McCue
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
    52
 * @copyright 2007-2012 Sam Sneddon, Steve Minutillo, Ryan McCue
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    53
 * @license http://www.opensource.org/licenses/bsd-license.php
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    54
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    55
class SimplePie_IRI
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    56
{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    57
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    58
	 * Scheme
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    59
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    60
	 * @var string
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    61
	 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    62
	protected $scheme = null;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    63
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    64
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    65
	 * User Information
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    66
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    67
	 * @var string
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    68
	 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    69
	protected $iuserinfo = null;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    70
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    71
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    72
	 * ihost
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    73
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    74
	 * @var string
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    75
	 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    76
	protected $ihost = null;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    77
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    78
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    79
	 * Port
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    80
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    81
	 * @var string
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    82
	 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    83
	protected $port = null;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    84
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    85
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    86
	 * ipath
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    87
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    88
	 * @var string
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    89
	 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    90
	protected $ipath = '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    91
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    92
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    93
	 * iquery
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    94
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    95
	 * @var string
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    96
	 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    97
	protected $iquery = null;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    98
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    99
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   100
	 * ifragment
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   101
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   102
	 * @var string
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   103
	 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   104
	protected $ifragment = null;
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
	 * Normalization database
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   108
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   109
	 * Each key is the scheme, each value is an array with each key as the IRI
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   110
	 * part and value as the default value for that part.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   111
	 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   112
	protected $normalization = array(
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   113
		'acap' => array(
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   114
			'port' => 674
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   115
		),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   116
		'dict' => array(
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   117
			'port' => 2628
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   118
		),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   119
		'file' => array(
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   120
			'ihost' => 'localhost'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   121
		),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   122
		'http' => array(
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   123
			'port' => 80,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   124
			'ipath' => '/'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   125
		),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   126
		'https' => array(
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   127
			'port' => 443,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   128
			'ipath' => '/'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   129
		),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   130
	);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   131
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   132
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   133
	 * Return the entire IRI when you try and read the object as a string
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   134
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   135
	 * @return string
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   136
	 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   137
	public function __toString()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   138
	{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   139
		return $this->get_iri();
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
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   143
	 * Overload __set() to provide access via properties
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   144
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   145
	 * @param string $name Property name
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   146
	 * @param mixed $value Property value
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 __set($name, $value)
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 (method_exists($this, 'set_' . $name))
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   151
		{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   152
			call_user_func(array($this, 'set_' . $name), $value);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   153
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   154
		elseif (
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   155
			   $name === 'iauthority'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   156
			|| $name === 'iuserinfo'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   157
			|| $name === 'ihost'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   158
			|| $name === 'ipath'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   159
			|| $name === 'iquery'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   160
			|| $name === 'ifragment'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   161
		)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   162
		{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   163
			call_user_func(array($this, 'set_' . substr($name, 1)), $value);
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
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   168
	 * Overload __get() to provide access via properties
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   169
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   170
	 * @param string $name Property name
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   171
	 * @return mixed
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   172
	 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   173
	public function __get($name)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   174
	{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   175
		// isset() returns false for null, we don't want to do that
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   176
		// Also why we use array_key_exists below instead of isset()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   177
		$props = get_object_vars($this);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   178
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   179
		if (
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   180
			$name === 'iri' ||
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   181
			$name === 'uri' ||
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   182
			$name === 'iauthority' ||
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   183
			$name === 'authority'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   184
		)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   185
		{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   186
			$return = $this->{"get_$name"}();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   187
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   188
		elseif (array_key_exists($name, $props))
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   189
		{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   190
			$return = $this->$name;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   191
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   192
		// host -> ihost
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   193
		elseif (($prop = 'i' . $name) && array_key_exists($prop, $props))
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   194
		{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   195
			$name = $prop;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   196
			$return = $this->$prop;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   197
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   198
		// ischeme -> scheme
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   199
		elseif (($prop = substr($name, 1)) && array_key_exists($prop, $props))
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   200
		{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   201
			$name = $prop;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   202
			$return = $this->$prop;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   203
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   204
		else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   205
		{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   206
			trigger_error('Undefined property: ' . get_class($this) . '::' . $name, E_USER_NOTICE);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   207
			$return = null;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   208
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   209
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   210
		if ($return === null && isset($this->normalization[$this->scheme][$name]))
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   211
		{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   212
			return $this->normalization[$this->scheme][$name];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   213
		}
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   214
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   215
		return $return;
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   216
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   217
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   218
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   219
	 * Overload __isset() to provide access via properties
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   220
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   221
	 * @param string $name Property name
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   222
	 * @return bool
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   223
	 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   224
	public function __isset($name)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   225
	{
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   226
		return method_exists($this, 'get_' . $name) || isset($this->$name);
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   227
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   228
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   229
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   230
	 * Overload __unset() to provide access via properties
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   231
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   232
	 * @param string $name Property name
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   233
	 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   234
	public function __unset($name)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   235
	{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   236
		if (method_exists($this, 'set_' . $name))
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   237
		{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   238
			call_user_func(array($this, 'set_' . $name), '');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   239
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   240
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   241
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   242
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   243
	 * Create a new IRI object, from a specified string
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   244
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   245
	 * @param string $iri
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   246
	 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   247
	public function __construct($iri = null)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   248
	{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   249
		$this->set_iri($iri);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   250
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   251
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   252
	/**
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   253
	 * Clean up
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   254
	 */
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   255
	public function __destruct() {
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   256
	    $this->set_iri(null, true);
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   257
	    $this->set_path(null, true);
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   258
	    $this->set_authority(null, true);
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   259
	}
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   260
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   261
	/**
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   262
	 * Create a new IRI object by resolving a relative IRI
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   263
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   264
	 * Returns false if $base is not absolute, otherwise an IRI.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   265
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   266
	 * @param IRI|string $base (Absolute) Base IRI
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   267
	 * @param IRI|string $relative Relative IRI
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   268
	 * @return IRI|false
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   269
	 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   270
	public static function absolutize($base, $relative)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   271
	{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   272
		if (!($relative instanceof SimplePie_IRI))
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   273
		{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   274
			$relative = new SimplePie_IRI($relative);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   275
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   276
		if (!$relative->is_valid())
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   277
		{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   278
			return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   279
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   280
		elseif ($relative->scheme !== null)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   281
		{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   282
			return clone $relative;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   283
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   284
		else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   285
		{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   286
			if (!($base instanceof SimplePie_IRI))
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   287
			{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   288
				$base = new SimplePie_IRI($base);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   289
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   290
			if ($base->scheme !== null && $base->is_valid())
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   291
			{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   292
				if ($relative->get_iri() !== '')
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   293
				{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   294
					if ($relative->iuserinfo !== null || $relative->ihost !== null || $relative->port !== null)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   295
					{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   296
						$target = clone $relative;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   297
						$target->scheme = $base->scheme;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   298
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   299
					else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   300
					{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   301
						$target = new SimplePie_IRI;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   302
						$target->scheme = $base->scheme;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   303
						$target->iuserinfo = $base->iuserinfo;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   304
						$target->ihost = $base->ihost;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   305
						$target->port = $base->port;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   306
						if ($relative->ipath !== '')
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   307
						{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   308
							if ($relative->ipath[0] === '/')
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   309
							{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   310
								$target->ipath = $relative->ipath;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   311
							}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   312
							elseif (($base->iuserinfo !== null || $base->ihost !== null || $base->port !== null) && $base->ipath === '')
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   313
							{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   314
								$target->ipath = '/' . $relative->ipath;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   315
							}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   316
							elseif (($last_segment = strrpos($base->ipath, '/')) !== false)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   317
							{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   318
								$target->ipath = substr($base->ipath, 0, $last_segment + 1) . $relative->ipath;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   319
							}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   320
							else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   321
							{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   322
								$target->ipath = $relative->ipath;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   323
							}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   324
							$target->ipath = $target->remove_dot_segments($target->ipath);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   325
							$target->iquery = $relative->iquery;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   326
						}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   327
						else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   328
						{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   329
							$target->ipath = $base->ipath;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   330
							if ($relative->iquery !== null)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   331
							{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   332
								$target->iquery = $relative->iquery;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   333
							}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   334
							elseif ($base->iquery !== null)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   335
							{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   336
								$target->iquery = $base->iquery;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   337
							}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   338
						}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   339
						$target->ifragment = $relative->ifragment;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   340
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   341
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   342
				else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   343
				{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   344
					$target = clone $base;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   345
					$target->ifragment = null;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   346
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   347
				$target->scheme_normalization();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   348
				return $target;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   349
			}
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   350
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   351
			return false;
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   352
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   353
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   354
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   355
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   356
	 * Parse an IRI into scheme/authority/path/query/fragment segments
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   357
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   358
	 * @param string $iri
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   359
	 * @return array
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   360
	 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   361
	protected function parse_iri($iri)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   362
	{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   363
		$iri = trim($iri, "\x20\x09\x0A\x0C\x0D");
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   364
		if (preg_match('/^((?P<scheme>[^:\/?#]+):)?(\/\/(?P<authority>[^\/?#]*))?(?P<path>[^?#]*)(\?(?P<query>[^#]*))?(#(?P<fragment>.*))?$/', $iri, $match))
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   365
		{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   366
			if ($match[1] === '')
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   367
			{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   368
				$match['scheme'] = null;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   369
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   370
			if (!isset($match[3]) || $match[3] === '')
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   371
			{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   372
				$match['authority'] = null;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   373
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   374
			if (!isset($match[5]))
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   375
			{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   376
				$match['path'] = '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   377
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   378
			if (!isset($match[6]) || $match[6] === '')
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   379
			{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   380
				$match['query'] = null;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   381
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   382
			if (!isset($match[8]) || $match[8] === '')
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   383
			{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   384
				$match['fragment'] = null;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   385
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   386
			return $match;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   387
		}
16
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 can occur when a paragraph is accidentally parsed as a URI
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   390
		return false;
0
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
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   394
	 * Remove dot segments from a path
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   395
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   396
	 * @param string $input
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   397
	 * @return string
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   398
	 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   399
	protected function remove_dot_segments($input)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   400
	{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   401
		$output = '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   402
		while (strpos($input, './') !== false || strpos($input, '/.') !== false || $input === '.' || $input === '..')
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   403
		{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   404
			// A: If the input buffer begins with a prefix of "../" or "./", then remove that prefix from the input buffer; otherwise,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   405
			if (strpos($input, '../') === 0)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   406
			{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   407
				$input = substr($input, 3);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   408
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   409
			elseif (strpos($input, './') === 0)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   410
			{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   411
				$input = substr($input, 2);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   412
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   413
			// B: if the input buffer begins with a prefix of "/./" or "/.", where "." is a complete path segment, then replace that prefix with "/" in the input buffer; otherwise,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   414
			elseif (strpos($input, '/./') === 0)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   415
			{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   416
				$input = substr($input, 2);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   417
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   418
			elseif ($input === '/.')
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   419
			{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   420
				$input = '/';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   421
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   422
			// C: if the input buffer begins with a prefix of "/../" or "/..", where ".." is a complete path segment, then replace that prefix with "/" in the input buffer and remove the last segment and its preceding "/" (if any) from the output buffer; otherwise,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   423
			elseif (strpos($input, '/../') === 0)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   424
			{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   425
				$input = substr($input, 3);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   426
				$output = substr_replace($output, '', strrpos($output, '/'));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   427
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   428
			elseif ($input === '/..')
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   429
			{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   430
				$input = '/';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   431
				$output = substr_replace($output, '', strrpos($output, '/'));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   432
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   433
			// D: if the input buffer consists only of "." or "..", then remove that from the input buffer; otherwise,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   434
			elseif ($input === '.' || $input === '..')
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   435
			{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   436
				$input = '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   437
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   438
			// E: move the first path segment in the input buffer to the end of the output buffer, including the initial "/" character (if any) and any subsequent characters up to, but not including, the next "/" character or the end of the input buffer
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   439
			elseif (($pos = strpos($input, '/', 1)) !== false)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   440
			{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   441
				$output .= substr($input, 0, $pos);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   442
				$input = substr_replace($input, '', 0, $pos);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   443
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   444
			else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   445
			{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   446
				$output .= $input;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   447
				$input = '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   448
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   449
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   450
		return $output . $input;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   451
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   452
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   453
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   454
	 * Replace invalid character with percent encoding
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   455
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   456
	 * @param string $string Input string
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   457
	 * @param string $extra_chars Valid characters not in iunreserved or
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   458
	 *                            iprivate (this is ASCII-only)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   459
	 * @param bool $iprivate Allow iprivate
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   460
	 * @return string
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   461
	 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   462
	protected function replace_invalid_with_pct_encoding($string, $extra_chars, $iprivate = false)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   463
	{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   464
		// Normalize as many pct-encoded sections as possible
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   465
		$string = preg_replace_callback('/(?:%[A-Fa-f0-9]{2})+/', array($this, 'remove_iunreserved_percent_encoded'), $string);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   466
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   467
		// Replace invalid percent characters
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   468
		$string = preg_replace('/%(?![A-Fa-f0-9]{2})/', '%25', $string);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   469
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   470
		// Add unreserved and % to $extra_chars (the latter is safe because all
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   471
		// pct-encoded sections are now valid).
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   472
		$extra_chars .= 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~%';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   473
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   474
		// Now replace any bytes that aren't allowed with their pct-encoded versions
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   475
		$position = 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   476
		$strlen = strlen($string);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   477
		while (($position += strspn($string, $extra_chars, $position)) < $strlen)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   478
		{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   479
			$value = ord($string[$position]);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   480
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   481
			// Start position
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   482
			$start = $position;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   483
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   484
			// By default we are valid
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   485
			$valid = true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   486
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   487
			// No one byte sequences are valid due to the while.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   488
			// Two byte sequence:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   489
			if (($value & 0xE0) === 0xC0)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   490
			{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   491
				$character = ($value & 0x1F) << 6;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   492
				$length = 2;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   493
				$remaining = 1;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   494
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   495
			// Three byte sequence:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   496
			elseif (($value & 0xF0) === 0xE0)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   497
			{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   498
				$character = ($value & 0x0F) << 12;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   499
				$length = 3;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   500
				$remaining = 2;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   501
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   502
			// Four byte sequence:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   503
			elseif (($value & 0xF8) === 0xF0)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   504
			{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   505
				$character = ($value & 0x07) << 18;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   506
				$length = 4;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   507
				$remaining = 3;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   508
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   509
			// Invalid byte:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   510
			else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   511
			{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   512
				$valid = false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   513
				$length = 1;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   514
				$remaining = 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   515
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   516
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   517
			if ($remaining)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   518
			{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   519
				if ($position + $length <= $strlen)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   520
				{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   521
					for ($position++; $remaining; $position++)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   522
					{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   523
						$value = ord($string[$position]);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   524
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   525
						// Check that the byte is valid, then add it to the character:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   526
						if (($value & 0xC0) === 0x80)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   527
						{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   528
							$character |= ($value & 0x3F) << (--$remaining * 6);
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 it is invalid, count the sequence as invalid and reprocess the current byte:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   531
						else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   532
						{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   533
							$valid = false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   534
							$position--;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   535
							break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   536
						}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   537
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   538
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   539
				else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   540
				{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   541
					$position = $strlen - 1;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   542
					$valid = false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   543
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   544
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   545
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   546
			// Percent encode anything invalid or not in ucschar
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   547
			if (
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   548
				// Invalid sequences
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   549
				!$valid
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   550
				// Non-shortest form sequences are invalid
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   551
				|| $length > 1 && $character <= 0x7F
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   552
				|| $length > 2 && $character <= 0x7FF
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   553
				|| $length > 3 && $character <= 0xFFFF
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   554
				// Outside of range of ucschar codepoints
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   555
				// Noncharacters
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   556
				|| ($character & 0xFFFE) === 0xFFFE
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   557
				|| $character >= 0xFDD0 && $character <= 0xFDEF
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   558
				|| (
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   559
					// Everything else not in ucschar
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   560
					   $character > 0xD7FF && $character < 0xF900
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   561
					|| $character < 0xA0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   562
					|| $character > 0xEFFFD
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   563
				)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   564
				&& (
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   565
					// Everything not in iprivate, if it applies
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   566
					   !$iprivate
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   567
					|| $character < 0xE000
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   568
					|| $character > 0x10FFFD
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   569
				)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   570
			)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   571
			{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   572
				// If we were a character, pretend we weren't, but rather an error.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   573
				if ($valid)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   574
					$position--;
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 ($j = $start; $j <= $position; $j++)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   577
				{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   578
					$string = substr_replace($string, sprintf('%%%02X', ord($string[$j])), $j, 1);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   579
					$j += 2;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   580
					$position += 2;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   581
					$strlen += 2;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   582
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   583
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   584
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   585
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   586
		return $string;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   587
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   588
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   589
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   590
	 * Callback function for preg_replace_callback.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   591
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   592
	 * Removes sequences of percent encoded bytes that represent UTF-8
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   593
	 * encoded characters in iunreserved
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   594
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   595
	 * @param array $match PCRE match
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   596
	 * @return string Replacement
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   597
	 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   598
	protected function remove_iunreserved_percent_encoded($match)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   599
	{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   600
		// As we just have valid percent encoded sequences we can just explode
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   601
		// and ignore the first member of the returned array (an empty string).
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   602
		$bytes = explode('%', $match[0]);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   603
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   604
		// Initialize the new string (this is what will be returned) and that
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   605
		// there are no bytes remaining in the current sequence (unsurprising
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   606
		// at the first byte!).
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   607
		$string = '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   608
		$remaining = 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   609
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   610
		// Loop over each and every byte, and set $value to its value
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   611
		for ($i = 1, $len = count($bytes); $i < $len; $i++)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   612
		{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   613
			$value = hexdec($bytes[$i]);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   614
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   615
			// If we're the first byte of sequence:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   616
			if (!$remaining)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   617
			{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   618
				// Start position
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   619
				$start = $i;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   620
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   621
				// By default we are valid
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   622
				$valid = true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   623
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   624
				// One byte sequence:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   625
				if ($value <= 0x7F)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   626
				{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   627
					$character = $value;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   628
					$length = 1;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   629
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   630
				// Two byte sequence:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   631
				elseif (($value & 0xE0) === 0xC0)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   632
				{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   633
					$character = ($value & 0x1F) << 6;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   634
					$length = 2;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   635
					$remaining = 1;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   636
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   637
				// Three byte sequence:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   638
				elseif (($value & 0xF0) === 0xE0)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   639
				{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   640
					$character = ($value & 0x0F) << 12;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   641
					$length = 3;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   642
					$remaining = 2;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   643
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   644
				// Four byte sequence:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   645
				elseif (($value & 0xF8) === 0xF0)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   646
				{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   647
					$character = ($value & 0x07) << 18;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   648
					$length = 4;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   649
					$remaining = 3;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   650
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   651
				// Invalid byte:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   652
				else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   653
				{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   654
					$valid = false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   655
					$remaining = 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   656
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   657
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   658
			// Continuation byte:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   659
			else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   660
			{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   661
				// Check that the byte is valid, then add it to the character:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   662
				if (($value & 0xC0) === 0x80)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   663
				{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   664
					$remaining--;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   665
					$character |= ($value & 0x3F) << ($remaining * 6);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   666
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   667
				// If it is invalid, count the sequence as invalid and reprocess the current byte as the start of a sequence:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   668
				else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   669
				{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   670
					$valid = false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   671
					$remaining = 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   672
					$i--;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   673
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   674
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   675
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   676
			// If we've reached the end of the current byte sequence, append it to Unicode::$data
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   677
			if (!$remaining)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   678
			{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   679
				// Percent encode anything invalid or not in iunreserved
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   680
				if (
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   681
					// Invalid sequences
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   682
					!$valid
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   683
					// Non-shortest form sequences are invalid
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   684
					|| $length > 1 && $character <= 0x7F
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   685
					|| $length > 2 && $character <= 0x7FF
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   686
					|| $length > 3 && $character <= 0xFFFF
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   687
					// Outside of range of iunreserved codepoints
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   688
					|| $character < 0x2D
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   689
					|| $character > 0xEFFFD
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   690
					// Noncharacters
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   691
					|| ($character & 0xFFFE) === 0xFFFE
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   692
					|| $character >= 0xFDD0 && $character <= 0xFDEF
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   693
					// Everything else not in iunreserved (this is all BMP)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   694
					|| $character === 0x2F
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   695
					|| $character > 0x39 && $character < 0x41
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   696
					|| $character > 0x5A && $character < 0x61
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   697
					|| $character > 0x7A && $character < 0x7E
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   698
					|| $character > 0x7E && $character < 0xA0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   699
					|| $character > 0xD7FF && $character < 0xF900
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   700
				)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   701
				{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   702
					for ($j = $start; $j <= $i; $j++)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   703
					{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   704
						$string .= '%' . strtoupper($bytes[$j]);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   705
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   706
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   707
				else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   708
				{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   709
					for ($j = $start; $j <= $i; $j++)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   710
					{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   711
						$string .= chr(hexdec($bytes[$j]));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   712
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   713
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   714
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   715
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   716
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   717
		// If we have any bytes left over they are invalid (i.e., we are
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   718
		// mid-way through a multi-byte sequence)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   719
		if ($remaining)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   720
		{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   721
			for ($j = $start; $j < $len; $j++)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   722
			{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   723
				$string .= '%' . strtoupper($bytes[$j]);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   724
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   725
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   726
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   727
		return $string;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   728
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   729
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   730
	protected function scheme_normalization()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   731
	{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   732
		if (isset($this->normalization[$this->scheme]['iuserinfo']) && $this->iuserinfo === $this->normalization[$this->scheme]['iuserinfo'])
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   733
		{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   734
			$this->iuserinfo = null;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   735
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   736
		if (isset($this->normalization[$this->scheme]['ihost']) && $this->ihost === $this->normalization[$this->scheme]['ihost'])
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   737
		{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   738
			$this->ihost = null;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   739
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   740
		if (isset($this->normalization[$this->scheme]['port']) && $this->port === $this->normalization[$this->scheme]['port'])
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   741
		{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   742
			$this->port = null;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   743
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   744
		if (isset($this->normalization[$this->scheme]['ipath']) && $this->ipath === $this->normalization[$this->scheme]['ipath'])
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   745
		{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   746
			$this->ipath = '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   747
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   748
		if (isset($this->normalization[$this->scheme]['iquery']) && $this->iquery === $this->normalization[$this->scheme]['iquery'])
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   749
		{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   750
			$this->iquery = null;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   751
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   752
		if (isset($this->normalization[$this->scheme]['ifragment']) && $this->ifragment === $this->normalization[$this->scheme]['ifragment'])
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   753
		{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   754
			$this->ifragment = null;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   755
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   756
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   757
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   758
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   759
	 * Check if the object represents a valid IRI. This needs to be done on each
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   760
	 * call as some things change depending on another part of the IRI.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   761
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   762
	 * @return bool
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   763
	 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   764
	public function is_valid()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   765
	{
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   766
		if ($this->ipath === '') return true;
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   767
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   768
		$isauthority = $this->iuserinfo !== null || $this->ihost !== null ||
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   769
			$this->port !== null;
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   770
		if ($isauthority && $this->ipath[0] === '/') return true;
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   771
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   772
		if (!$isauthority && (substr($this->ipath, 0, 2) === '//')) return false;
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   773
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   774
		// Relative urls cannot have a colon in the first path segment (and the
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   775
		// slashes themselves are not included so skip the first character).
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   776
		if (!$this->scheme && !$isauthority &&
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   777
		    strpos($this->ipath, ':') !== false &&
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   778
		    strpos($this->ipath, '/', 1) !== false &&
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   779
		    strpos($this->ipath, ':') < strpos($this->ipath, '/', 1)) return false;
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   780
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   781
		return true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   782
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   783
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   784
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   785
	 * Set the entire IRI. Returns true on success, false on failure (if there
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   786
	 * are any invalid characters).
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   787
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   788
	 * @param string $iri
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   789
	 * @return bool
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   790
	 */
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   791
	public function set_iri($iri, $clear_cache = false)
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   792
	{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   793
		static $cache;
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   794
		if ($clear_cache)
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   795
		{
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   796
			$cache = null;
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   797
			return;
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   798
		}
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   799
		if (!$cache)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   800
		{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   801
			$cache = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   802
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   803
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   804
		if ($iri === null)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   805
		{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   806
			return true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   807
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   808
		elseif (isset($cache[$iri]))
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   809
		{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   810
			list($this->scheme,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   811
				 $this->iuserinfo,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   812
				 $this->ihost,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   813
				 $this->port,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   814
				 $this->ipath,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   815
				 $this->iquery,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   816
				 $this->ifragment,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   817
				 $return) = $cache[$iri];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   818
			return $return;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   819
		}
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   820
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   821
		$parsed = $this->parse_iri((string) $iri);
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   822
		if (!$parsed)
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   823
		{
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   824
			return false;
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   825
		}
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   826
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   827
		$return = $this->set_scheme($parsed['scheme'])
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   828
			&& $this->set_authority($parsed['authority'])
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   829
			&& $this->set_path($parsed['path'])
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   830
			&& $this->set_query($parsed['query'])
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   831
			&& $this->set_fragment($parsed['fragment']);
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   832
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   833
		$cache[$iri] = array($this->scheme,
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   834
							 $this->iuserinfo,
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   835
							 $this->ihost,
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   836
							 $this->port,
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   837
							 $this->ipath,
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   838
							 $this->iquery,
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   839
							 $this->ifragment,
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   840
							 $return);
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   841
		return $return;
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   842
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   843
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   844
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   845
	 * Set the scheme. Returns true on success, false on failure (if there are
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   846
	 * any invalid characters).
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   847
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   848
	 * @param string $scheme
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   849
	 * @return bool
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   850
	 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   851
	public function set_scheme($scheme)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   852
	{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   853
		if ($scheme === null)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   854
		{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   855
			$this->scheme = null;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   856
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   857
		elseif (!preg_match('/^[A-Za-z][0-9A-Za-z+\-.]*$/', $scheme))
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   858
		{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   859
			$this->scheme = null;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   860
			return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   861
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   862
		else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   863
		{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   864
			$this->scheme = strtolower($scheme);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   865
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   866
		return true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   867
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   868
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   869
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   870
	 * Set the authority. Returns true on success, false on failure (if there are
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   871
	 * any invalid characters).
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   872
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   873
	 * @param string $authority
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   874
	 * @return bool
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   875
	 */
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   876
	public function set_authority($authority, $clear_cache = false)
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   877
	{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   878
		static $cache;
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   879
		if ($clear_cache)
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   880
		{
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   881
			$cache = null;
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   882
			return;
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   883
		}
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   884
		if (!$cache)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   885
			$cache = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   886
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   887
		if ($authority === null)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   888
		{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   889
			$this->iuserinfo = null;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   890
			$this->ihost = null;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   891
			$this->port = null;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   892
			return true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   893
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   894
		elseif (isset($cache[$authority]))
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   895
		{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   896
			list($this->iuserinfo,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   897
				 $this->ihost,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   898
				 $this->port,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   899
				 $return) = $cache[$authority];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   900
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   901
			return $return;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   902
		}
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   903
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   904
		$remaining = $authority;
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   905
		if (($iuserinfo_end = strrpos($remaining, '@')) !== false)
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   906
		{
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   907
			$iuserinfo = substr($remaining, 0, $iuserinfo_end);
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   908
			$remaining = substr($remaining, $iuserinfo_end + 1);
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   909
		}
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   910
		else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   911
		{
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   912
			$iuserinfo = null;
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   913
		}
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   914
		if (($port_start = strpos($remaining, ':', strpos($remaining, ']'))) !== false)
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   915
		{
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   916
			if (($port = substr($remaining, $port_start + 1)) === false)
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   917
			{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   918
				$port = null;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   919
			}
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   920
			$remaining = substr($remaining, 0, $port_start);
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   921
		}
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   922
		else
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   923
		{
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   924
			$port = null;
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   925
		}
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   926
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   927
		$return = $this->set_userinfo($iuserinfo) &&
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   928
				  $this->set_host($remaining) &&
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   929
				  $this->set_port($port);
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   930
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   931
		$cache[$authority] = array($this->iuserinfo,
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   932
								   $this->ihost,
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   933
								   $this->port,
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   934
								   $return);
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   935
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   936
		return $return;
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   937
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   938
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   939
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   940
	 * Set the iuserinfo.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   941
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   942
	 * @param string $iuserinfo
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   943
	 * @return bool
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   944
	 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   945
	public function set_userinfo($iuserinfo)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   946
	{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   947
		if ($iuserinfo === null)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   948
		{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   949
			$this->iuserinfo = null;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   950
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   951
		else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   952
		{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   953
			$this->iuserinfo = $this->replace_invalid_with_pct_encoding($iuserinfo, '!$&\'()*+,;=:');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   954
			$this->scheme_normalization();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   955
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   956
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   957
		return true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   958
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   959
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   960
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   961
	 * Set the ihost. Returns true on success, false on failure (if there are
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   962
	 * any invalid characters).
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   963
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   964
	 * @param string $ihost
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   965
	 * @return bool
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   966
	 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   967
	public function set_host($ihost)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   968
	{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   969
		if ($ihost === null)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   970
		{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   971
			$this->ihost = null;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   972
			return true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   973
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   974
		elseif (substr($ihost, 0, 1) === '[' && substr($ihost, -1) === ']')
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   975
		{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   976
			if (SimplePie_Net_IPv6::check_ipv6(substr($ihost, 1, -1)))
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   977
			{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   978
				$this->ihost = '[' . SimplePie_Net_IPv6::compress(substr($ihost, 1, -1)) . ']';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   979
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   980
			else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   981
			{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   982
				$this->ihost = null;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   983
				return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   984
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   985
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   986
		else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   987
		{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   988
			$ihost = $this->replace_invalid_with_pct_encoding($ihost, '!$&\'()*+,;=');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   989
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   990
			// Lowercase, but ignore pct-encoded sections (as they should
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   991
			// remain uppercase). This must be done after the previous step
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   992
			// as that can add unescaped characters.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   993
			$position = 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   994
			$strlen = strlen($ihost);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   995
			while (($position += strcspn($ihost, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ%', $position)) < $strlen)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   996
			{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   997
				if ($ihost[$position] === '%')
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   998
				{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   999
					$position += 3;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1000
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1001
				else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1002
				{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1003
					$ihost[$position] = strtolower($ihost[$position]);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1004
					$position++;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1005
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1006
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1007
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1008
			$this->ihost = $ihost;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1009
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1010
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1011
		$this->scheme_normalization();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1012
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1013
		return true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1014
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1015
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1016
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1017
	 * Set the port. Returns true on success, false on failure (if there are
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1018
	 * any invalid characters).
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1019
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1020
	 * @param string $port
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1021
	 * @return bool
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1022
	 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1023
	public function set_port($port)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1024
	{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1025
		if ($port === null)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1026
		{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1027
			$this->port = null;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1028
			return true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1029
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1030
		elseif (strspn($port, '0123456789') === strlen($port))
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1031
		{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1032
			$this->port = (int) $port;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1033
			$this->scheme_normalization();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1034
			return true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1035
		}
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1036
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1037
		$this->port = null;
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1038
		return false;
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1039
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1040
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1041
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1042
	 * Set the ipath.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1043
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1044
	 * @param string $ipath
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1045
	 * @return bool
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1046
	 */
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1047
	public function set_path($ipath, $clear_cache = false)
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1048
	{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1049
		static $cache;
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1050
		if ($clear_cache)
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1051
		{
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1052
			$cache = null;
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1053
			return;
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1054
		}
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1055
		if (!$cache)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1056
		{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1057
			$cache = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1058
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1059
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1060
		$ipath = (string) $ipath;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1061
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1062
		if (isset($cache[$ipath]))
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1063
		{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1064
			$this->ipath = $cache[$ipath][(int) ($this->scheme !== null)];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1065
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1066
		else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1067
		{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1068
			$valid = $this->replace_invalid_with_pct_encoding($ipath, '!$&\'()*+,;=@:/');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1069
			$removed = $this->remove_dot_segments($valid);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1070
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1071
			$cache[$ipath] = array($valid, $removed);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1072
			$this->ipath =  ($this->scheme !== null) ? $removed : $valid;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1073
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1074
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1075
		$this->scheme_normalization();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1076
		return true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1077
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1078
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1079
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1080
	 * Set the iquery.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1081
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1082
	 * @param string $iquery
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1083
	 * @return bool
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1084
	 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1085
	public function set_query($iquery)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1086
	{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1087
		if ($iquery === null)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1088
		{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1089
			$this->iquery = null;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1090
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1091
		else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1092
		{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1093
			$this->iquery = $this->replace_invalid_with_pct_encoding($iquery, '!$&\'()*+,;=:@/?', true);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1094
			$this->scheme_normalization();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1095
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1096
		return true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1097
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1098
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1099
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1100
	 * Set the ifragment.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1101
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1102
	 * @param string $ifragment
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1103
	 * @return bool
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1104
	 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1105
	public function set_fragment($ifragment)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1106
	{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1107
		if ($ifragment === null)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1108
		{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1109
			$this->ifragment = null;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1110
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1111
		else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1112
		{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1113
			$this->ifragment = $this->replace_invalid_with_pct_encoding($ifragment, '!$&\'()*+,;=:@/?');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1114
			$this->scheme_normalization();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1115
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1116
		return true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1117
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1118
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1119
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1120
	 * Convert an IRI to a URI (or parts thereof)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1121
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1122
	 * @return string
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1123
	 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1124
	public function to_uri($string)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1125
	{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1126
		static $non_ascii;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1127
		if (!$non_ascii)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1128
		{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1129
			$non_ascii = implode('', range("\x80", "\xFF"));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1130
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1131
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1132
		$position = 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1133
		$strlen = strlen($string);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1134
		while (($position += strcspn($string, $non_ascii, $position)) < $strlen)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1135
		{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1136
			$string = substr_replace($string, sprintf('%%%02X', ord($string[$position])), $position, 1);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1137
			$position += 3;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1138
			$strlen += 2;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1139
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1140
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1141
		return $string;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1142
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1143
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1144
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1145
	 * Get the complete IRI
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1146
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1147
	 * @return string
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1148
	 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1149
	public function get_iri()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1150
	{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1151
		if (!$this->is_valid())
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1152
		{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1153
			return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1154
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1155
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1156
		$iri = '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1157
		if ($this->scheme !== null)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1158
		{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1159
			$iri .= $this->scheme . ':';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1160
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1161
		if (($iauthority = $this->get_iauthority()) !== null)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1162
		{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1163
			$iri .= '//' . $iauthority;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1164
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1165
		if ($this->ipath !== '')
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1166
		{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1167
			$iri .= $this->ipath;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1168
		}
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1169
        elseif (!empty($this->normalization[$this->scheme]['ipath']) && $iauthority !== null && $iauthority !== '')
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1170
		{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1171
			$iri .= $this->normalization[$this->scheme]['ipath'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1172
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1173
		if ($this->iquery !== null)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1174
		{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1175
			$iri .= '?' . $this->iquery;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1176
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1177
		if ($this->ifragment !== null)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1178
		{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1179
			$iri .= '#' . $this->ifragment;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1180
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1181
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1182
		return $iri;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1183
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1184
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1185
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1186
	 * Get the complete URI
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1187
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1188
	 * @return string
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1189
	 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1190
	public function get_uri()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1191
	{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1192
		return $this->to_uri($this->get_iri());
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1193
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1194
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1195
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1196
	 * Get the complete iauthority
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1197
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1198
	 * @return string
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1199
	 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1200
	protected function get_iauthority()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1201
	{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1202
		if ($this->iuserinfo !== null || $this->ihost !== null || $this->port !== null)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1203
		{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1204
			$iauthority = '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1205
			if ($this->iuserinfo !== null)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1206
			{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1207
				$iauthority .= $this->iuserinfo . '@';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1208
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1209
			if ($this->ihost !== null)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1210
			{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1211
				$iauthority .= $this->ihost;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1212
			}
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1213
            if ($this->port !== null && $this->port !== 0)
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1214
			{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1215
				$iauthority .= ':' . $this->port;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1216
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1217
			return $iauthority;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1218
		}
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1219
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1220
		return null;
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1221
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1222
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1223
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1224
	 * Get the complete authority
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1225
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1226
	 * @return string
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1227
	 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1228
	protected function get_authority()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1229
	{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1230
		$iauthority = $this->get_iauthority();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1231
		if (is_string($iauthority))
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1232
			return $this->to_uri($iauthority);
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1233
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1234
		return $iauthority;
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1235
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1236
}