You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							940 lines
						
					
					
						
							19 KiB
						
					
					
				
			
		
		
	
	
							940 lines
						
					
					
						
							19 KiB
						
					
					
				| <?php
 | |
| 
 | |
| /**
 | |
|  * @file
 | |
|  * TeamSpeak 3 PHP Framework
 | |
|  *
 | |
|  * $Id: String.php 06/06/2016 22:27:13 scp@Svens-iMac $
 | |
|  *
 | |
|  * This program is free software: you can redistribute it and/or modify
 | |
|  * it under the terms of the GNU General Public License as published by
 | |
|  * the Free Software Foundation, either version 3 of the License, or
 | |
|  * (at your option) any later version.
 | |
|  *
 | |
|  * This program is distributed in the hope that it will be useful,
 | |
|  * but WITHOUT ANY WARRANTY; without even the implied warranty of
 | |
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 | |
|  * GNU General Public License for more details.
 | |
|  *
 | |
|  * You should have received a copy of the GNU General Public License
 | |
|  * along with this program. If not, see <http://www.gnu.org/licenses/>.
 | |
|  *
 | |
|  * @package   TeamSpeak3
 | |
|  * @version   1.1.24
 | |
|  * @author    Sven 'ScP' Paulsen
 | |
|  * @copyright Copyright (c) 2010 by Planet TeamSpeak. All rights reserved.
 | |
|  */
 | |
| 
 | |
| /**
 | |
|  * @class TeamSpeak3_Helper_String
 | |
|  * @brief Helper class for string handling.
 | |
|  */
 | |
| class TeamSpeak3_Helper_String implements ArrayAccess, Iterator, Countable
 | |
| {
 | |
|   /**
 | |
|    * Stores the original string.
 | |
|    *
 | |
|    * @var string
 | |
|    */
 | |
|   protected $string;
 | |
| 
 | |
|   /**
 | |
|    * @ignore
 | |
|    */
 | |
|   protected $position = 0;
 | |
| 
 | |
|   /**
 | |
|    * The TeamSpeak3_Helper_String constructor.
 | |
|    *
 | |
|    * @param  string $string
 | |
|    * @return TeamSpeak3_Helper_String
 | |
|    */
 | |
|   public function __construct($string)
 | |
|   {
 | |
|     $this->string = (string) $string;
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * Returns a TeamSpeak3_Helper_String object for thegiven string.
 | |
|    *
 | |
|    * @param  string $string
 | |
|    * @return TeamSpeak3_Helper_String
 | |
|    */
 | |
|   public static function factory($string)
 | |
|   {
 | |
|     return new self($string);
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * Replaces every occurrence of the string $search with the string $replace.
 | |
|    *
 | |
|    * @param  string  $search
 | |
|    * @param  string  $replace
 | |
|    * @param  boolean $caseSensitivity
 | |
|    * @return TeamSpeak3_Helper_String
 | |
|    */
 | |
|   public function replace($search, $replace, $caseSensitivity = TRUE)
 | |
|   {
 | |
|     if($caseSensitivity)
 | |
|     {
 | |
|       $this->string = str_replace($search, $replace, $this->string);
 | |
|     }
 | |
|     else
 | |
|     {
 | |
|       $this->string = str_ireplace($search, $replace, $this->string);
 | |
|     }
 | |
| 
 | |
|     return $this;
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * This function replaces indexed or associative signs with given values.
 | |
|    *
 | |
|    * @param  array  $args
 | |
|    * @param  string $char
 | |
|    * @return TeamSpeak3_Helper_String
 | |
|    */
 | |
|   public function arg(array $args, $char = "%")
 | |
|   {
 | |
|     $args = array_reverse($args, TRUE);
 | |
| 
 | |
|     foreach($args as $key => $val)
 | |
|     {
 | |
|       $args[$char . $key] = $val;
 | |
|       unset($args[$key]);
 | |
|     }
 | |
| 
 | |
|     $this->string = strtr($this->string, $args);
 | |
| 
 | |
|     return $this;
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * Returns true if the string starts with $pattern.
 | |
|    *
 | |
|    * @param  string  $pattern
 | |
|    * @return boolean
 | |
|    */
 | |
|   public function startsWith($pattern)
 | |
|   {
 | |
|     return (substr($this->string, 0, strlen($pattern)) == $pattern) ? TRUE : FALSE;
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * Returns true if the string ends with $pattern.
 | |
|    *
 | |
|    * @param  string  $pattern
 | |
|    * @return boolean
 | |
|    */
 | |
|   public function endsWith($pattern)
 | |
|   {
 | |
|     return (substr($this->string, strlen($pattern)*-1) == $pattern) ? TRUE : FALSE;
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * Returns the position of the first occurrence of a char in a string.
 | |
|    *
 | |
|    * @param  string $needle
 | |
|    * @return integer
 | |
|    */
 | |
|   public function findFirst($needle)
 | |
|   {
 | |
|     return strpos($this->string, $needle);
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * Returns the position of the last occurrence of a char in a string.
 | |
|    *
 | |
|    * @param  string $needle
 | |
|    * @return integer
 | |
|    */
 | |
|   public function findLast($needle)
 | |
|   {
 | |
|     return strrpos($this->string, $needle);
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * Returns the lowercased string.
 | |
|    *
 | |
|    * @return TeamSpeak3_Helper_String
 | |
|    */
 | |
|   public function toLower()
 | |
|   {
 | |
|     return new self(strtolower($this->string));
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * Returns the uppercased string.
 | |
|    *
 | |
|    * @return TeamSpeak3_Helper_String
 | |
|    */
 | |
|   public function toUpper()
 | |
|   {
 | |
|     return new self(strtoupper($this->string));
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * Returns true if the string contains $pattern.
 | |
|    *
 | |
|    * @param  string  $pattern
 | |
|    * @param  boolean $regexp
 | |
|    * @return boolean
 | |
|    */
 | |
|   public function contains($pattern, $regexp = FALSE)
 | |
|   {
 | |
|     if(empty($pattern))
 | |
|     {
 | |
|       return TRUE;
 | |
|     }
 | |
| 
 | |
|     if($regexp)
 | |
|     {
 | |
|       return (preg_match("/" . $pattern . "/i", $this->string)) ? TRUE : FALSE;
 | |
|     }
 | |
|     else
 | |
|     {
 | |
|       return (stristr($this->string, $pattern) !== FALSE) ? TRUE : FALSE;
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * Returns part of a string.
 | |
|    *
 | |
|    * @param  integer $start
 | |
|    * @param  integer $length
 | |
|    * @return TeamSpeak3_Helper_String
 | |
|    */
 | |
|   public function substr($start, $length = null)
 | |
|   {
 | |
|     $string = ($length !== null) ? substr($this->string, $start, $length) : substr($this->string, $start);
 | |
| 
 | |
|     return new self($string);
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * Splits the string into substrings wherever $separator occurs.
 | |
|    *
 | |
|    * @param  string  $separator
 | |
|    * @param  integer $limit
 | |
|    * @return array
 | |
|    */
 | |
|   public function split($separator, $limit = 0)
 | |
|   {
 | |
|     $parts = explode($separator, $this->string, ($limit) ? intval($limit) : $this->count());
 | |
| 
 | |
|     foreach($parts as $key => $val)
 | |
|     {
 | |
|       $parts[$key] = new self($val);
 | |
|     }
 | |
| 
 | |
|     return $parts;
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * Appends $part to the string.
 | |
|    *
 | |
|    * @param  string $part
 | |
|    * @return TeamSpeak3_Helper_String
 | |
|    */
 | |
|   public function append($part)
 | |
|   {
 | |
|     $this->string = $this->string . strval($part);
 | |
| 
 | |
|     return $this;
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * Prepends $part to the string.
 | |
|    *
 | |
|    * @param  string $part
 | |
|    * @return TeamSpeak3_Helper_String
 | |
|    */
 | |
|   public function prepend($part)
 | |
|   {
 | |
|     $this->string = strval($part) . $this->string;
 | |
| 
 | |
|     return $this;
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * Returns a section of the string.
 | |
|    *
 | |
|    * @param  string  $separator
 | |
|    * @param  integer $first
 | |
|    * @param  integer $last
 | |
|    * @return TeamSpeak3_Helper_String
 | |
|    */
 | |
|   public function section($separator, $first = 0, $last = 0)
 | |
|   {
 | |
|     $sections = explode($separator, $this->string);
 | |
| 
 | |
|     $total = count($sections);
 | |
|     $first = intval($first);
 | |
|     $last  = intval($last);
 | |
| 
 | |
|     if($first > $total) return null;
 | |
|     if($first > $last) $last = $first;
 | |
| 
 | |
|     for($i = 0; $i < $total; $i++)
 | |
|     {
 | |
|       if($i < $first || $i > $last)
 | |
|       {
 | |
|         unset($sections[$i]);
 | |
|       }
 | |
|     }
 | |
| 
 | |
|     $string = implode($separator, $sections);
 | |
| 
 | |
|     return new self($string);
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * Sets the size of the string to $size characters.
 | |
|    *
 | |
|    * @param  integer $size
 | |
|    * @param  string  $char
 | |
|    * @return TeamSpeak3_Helper_String
 | |
|    */
 | |
|   public function resize($size, $char = "\0")
 | |
|   {
 | |
|     $chars = ($size - $this->count());
 | |
| 
 | |
|     if($chars < 0)
 | |
|     {
 | |
|       $this->string = substr($this->string, 0, $chars);
 | |
|     }
 | |
|     elseif($chars > 0)
 | |
|     {
 | |
|       $this->string = str_pad($this->string, $size, strval($char));
 | |
|     }
 | |
| 
 | |
|     return $this;
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * Strips whitespaces (or other characters) from the beginning and end of the string.
 | |
|    *
 | |
|    * @return TeamSpeak3_Helper_String
 | |
|    */
 | |
|   public function trim()
 | |
|   {
 | |
|     $this->string = trim($this->string);
 | |
| 
 | |
|     return $this;
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * Escapes a string using the TeamSpeak 3 escape patterns.
 | |
|    *
 | |
|    * @return TeamSpeak3_Helper_String
 | |
|    */
 | |
|   public function escape()
 | |
|   {
 | |
|     foreach(TeamSpeak3::getEscapePatterns() as $search => $replace)
 | |
|     {
 | |
|       $this->string = str_replace($search, $replace, $this->string);
 | |
|     }
 | |
| 
 | |
|     return $this;
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * Unescapes a string using the TeamSpeak 3 escape patterns.
 | |
|    *
 | |
|    * @return TeamSpeak3_Helper_String
 | |
|    */
 | |
|   public function unescape()
 | |
|   {
 | |
|     $this->string = strtr($this->string, array_flip(TeamSpeak3::getEscapePatterns()));
 | |
| 
 | |
|     return $this;
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * Removes any non alphanumeric characters from the string.
 | |
|    *
 | |
|    * @return TeamSpeak3_Helper_String
 | |
|    */
 | |
|   public function filterAlnum()
 | |
|   {
 | |
|     $this->string = preg_replace("/[^[:alnum:]]/", "",  $this->string);
 | |
| 
 | |
|     return $this;
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * Removes any non alphabetic characters from the string.
 | |
|    *
 | |
|    * @return TeamSpeak3_Helper_String
 | |
|    */
 | |
|   public function filterAlpha()
 | |
|   {
 | |
|     $this->string = preg_replace("/[^[:alpha:]]/", "",  $this->string);
 | |
| 
 | |
|     return $this;
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * Removes any non numeric characters from the string.
 | |
|    *
 | |
|    * @return TeamSpeak3_Helper_String
 | |
|    */
 | |
|   public function filterDigits()
 | |
|   {
 | |
|     $this->string = preg_replace("/[^[:digit:]]/", "",  $this->string);
 | |
| 
 | |
|     return $this;
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * Returns TRUE if the string is a numeric value.
 | |
|    *
 | |
|    * @return boolean
 | |
|    */
 | |
|   public function isInt()
 | |
|   {
 | |
|     return (is_numeric($this->string) && !$this->contains(".")) ? TRUE : FALSE;
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * Returns the integer value of the string.
 | |
|    *
 | |
|    * @return float
 | |
|    * @return integer
 | |
|    */
 | |
|   public function toInt()
 | |
|   {
 | |
|     if($this->string == pow(2, 63) || $this->string == pow(2, 64))
 | |
|     {
 | |
|       return -1;
 | |
|     }
 | |
| 
 | |
|     return ($this->string > pow(2, 31)) ? floatval($this->string) : intval($this->string);
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * Calculates and returns the crc32 polynomial of the string.
 | |
|    *
 | |
|    * @return string
 | |
|    */
 | |
|   public function toCrc32()
 | |
|   {
 | |
|     return crc32($this->string);
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * Calculates and returns the md5 checksum of the string.
 | |
|    *
 | |
|    * @return string
 | |
|    */
 | |
|   public function toMd5()
 | |
|   {
 | |
|     return md5($this->string);
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * Calculates and returns the sha1 checksum of the string.
 | |
|    *
 | |
|    * @return string
 | |
|    */
 | |
|   public function toSha1()
 | |
|   {
 | |
|     return sha1($this->string);
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * Returns TRUE if the string is UTF-8 encoded. This method searches for non-ascii multibyte
 | |
|    * sequences in the UTF-8 range.
 | |
|    *
 | |
|    * @return boolean
 | |
|    */
 | |
|   public function isUtf8()
 | |
|   {
 | |
|     $pattern = array();
 | |
| 
 | |
|     $pattern[] = "[\xC2-\xDF][\x80-\xBF]";            // non-overlong 2-byte
 | |
|     $pattern[] = "\xE0[\xA0-\xBF][\x80-\xBF]";        // excluding overlongs
 | |
|     $pattern[] = "[\xE1-\xEC\xEE\xEF][\x80-\xBF]{2}"; // straight 3-byte
 | |
|     $pattern[] = "\xED[\x80-\x9F][\x80-\xBF]";        // excluding surrogates
 | |
|     $pattern[] = "\xF0[\x90-\xBF][\x80-\xBF]{2}";     // planes 1-3
 | |
|     $pattern[] = "[\xF1-\xF3][\x80-\xBF]{3}";         // planes 4-15
 | |
|     $pattern[] = "\xF4[\x80-\x8F][\x80-\xBF]{2}";     // plane 16
 | |
| 
 | |
|     return preg_match("%(?:" . implode("|", $pattern) . ")+%xs", $this->string);
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * Converts the string to UTF-8.
 | |
|    *
 | |
|    * @return TeamSpeak3_Helper_String
 | |
|    */
 | |
|   public function toUtf8()
 | |
|   {
 | |
|     if(!$this->isUtf8())
 | |
|     {
 | |
|       $this->string = utf8_encode($this->string);
 | |
|     }
 | |
| 
 | |
|     return $this;
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * Encodes the string with MIME base64 and returns the result.
 | |
|    *
 | |
|    * @return string
 | |
|    */
 | |
|   public function toBase64()
 | |
|   {
 | |
|     return base64_encode($this->string);
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * Decodes the string with MIME base64 and returns the result as an TeamSpeak3_Helper_String
 | |
|    *
 | |
|    * @param  string $base64
 | |
|    * @return TeamSpeak3_Helper_String
 | |
|    */
 | |
|   public static function fromBase64($base64)
 | |
|   {
 | |
|     return new self(base64_decode($base64));
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * Returns the hexadecimal value of the string.
 | |
|    *
 | |
|    * @return string
 | |
|    */
 | |
|   public function toHex()
 | |
|   {
 | |
|     $hex = "";
 | |
| 
 | |
|     foreach($this as $char)
 | |
|     {
 | |
|       $hex .= $char->toHex();
 | |
|     }
 | |
| 
 | |
|     return $hex;
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * Returns the TeamSpeak3_Helper_String based on a given hex value.
 | |
|    *
 | |
|    * @param  string $hex
 | |
|    * @throws TeamSpeak3_Helper_Exception
 | |
|    * @return TeamSpeak3_Helper_String
 | |
|    */
 | |
|   public static function fromHex($hex)
 | |
|   {
 | |
|     $string = "";
 | |
| 
 | |
|     if(strlen($hex)%2 == 1)
 | |
|     {
 | |
|       throw new TeamSpeak3_Helper_Exception("given parameter '" . $hex . "' is not a valid hexadecimal number");
 | |
|     }
 | |
| 
 | |
|     foreach(str_split($hex, 2) as $chunk)
 | |
|     {
 | |
|       $string .= chr(hexdec($chunk));
 | |
|     }
 | |
| 
 | |
|     return new self($string);
 | |
|   }
 | |
|   
 | |
|   /**
 | |
|    * Returns the string transliterated from UTF-8 to Latin.
 | |
|    *
 | |
|    * @return TeamSpeak3_Helper_String
 | |
|    */
 | |
|   public function transliterate()
 | |
|   {
 | |
|     $utf8_accents = array(
 | |
|       "à" => "a",
 | |
|       "ô" => "o",
 | |
|       "ď" => "d",
 | |
|       "ḟ" => "f",
 | |
|       "ë" => "e",
 | |
|       "š" => "s",
 | |
|       "ơ" => "o",
 | |
|       "ß" => "ss",
 | |
|       "ă" => "a",
 | |
|       "ř" => "r",
 | |
|       "ț" => "t",
 | |
|       "ň" => "n",
 | |
|       "ā" => "a",
 | |
|       "ķ" => "k",
 | |
|       "ŝ" => "s",
 | |
|       "ỳ" => "y",
 | |
|       "ņ" => "n",
 | |
|       "ĺ" => "l",
 | |
|       "ħ" => "h",
 | |
|       "ṗ" => "p",
 | |
|       "ó" => "o",
 | |
|       "ú" => "u",
 | |
|       "ě" => "e",
 | |
|       "é" => "e",
 | |
|       "ç" => "c",
 | |
|       "ẁ" => "w",
 | |
|       "ċ" => "c",
 | |
|       "õ" => "o",
 | |
|       "ṡ" => "s",
 | |
|       "ø" => "o",
 | |
|       "ģ" => "g",
 | |
|       "ŧ" => "t",
 | |
|       "ș" => "s",
 | |
|       "ė" => "e",
 | |
|       "ĉ" => "c",
 | |
|       "ś" => "s",
 | |
|       "î" => "i",
 | |
|       "ű" => "u",
 | |
|       "ć" => "c",
 | |
|       "ę" => "e",
 | |
|       "ŵ" => "w",
 | |
|       "ṫ" => "t",
 | |
|       "ū" => "u",
 | |
|       "č" => "c",
 | |
|       "ö" => "oe",
 | |
|       "è" => "e",
 | |
|       "ŷ" => "y",
 | |
|       "ą" => "a",
 | |
|       "ł" => "l",
 | |
|       "ų" => "u",
 | |
|       "ů" => "u",
 | |
|       "ş" => "s",
 | |
|       "ğ" => "g",
 | |
|       "ļ" => "l",
 | |
|       "ƒ" => "f",
 | |
|       "ž" => "z",
 | |
|       "ẃ" => "w",
 | |
|       "ḃ" => "b",
 | |
|       "å" => "a",
 | |
|       "ì" => "i",
 | |
|       "ï" => "i",
 | |
|       "ḋ" => "d",
 | |
|       "ť" => "t",
 | |
|       "ŗ" => "r",
 | |
|       "ä" => "ae",
 | |
|       "í" => "i",
 | |
|       "ŕ" => "r",
 | |
|       "ê" => "e",
 | |
|       "ü" => "ue",
 | |
|       "ò" => "o",
 | |
|       "ē" => "e",
 | |
|       "ñ" => "n",
 | |
|       "ń" => "n",
 | |
|       "ĥ" => "h",
 | |
|       "ĝ" => "g",
 | |
|       "đ" => "d",
 | |
|       "ĵ" => "j",
 | |
|       "ÿ" => "y",
 | |
|       "ũ" => "u",
 | |
|       "ŭ" => "u",
 | |
|       "ư" => "u",
 | |
|       "ţ" => "t",
 | |
|       "ý" => "y",
 | |
|       "ő" => "o",
 | |
|       "â" => "a",
 | |
|       "ľ" => "l",
 | |
|       "ẅ" => "w",
 | |
|       "ż" => "z",
 | |
|       "ī" => "i",
 | |
|       "ã" => "a",
 | |
|       "ġ" => "g",
 | |
|       "ṁ" => "m",
 | |
|       "ō" => "o",
 | |
|       "ĩ" => "i",
 | |
|       "ù" => "u",
 | |
|       "į" => "i",
 | |
|       "ź" => "z",
 | |
|       "á" => "a",
 | |
|       "û" => "u",
 | |
|       "þ" => "th",
 | |
|       "ð" => "dh",
 | |
|       "æ" => "ae",
 | |
|       "µ" => "u",
 | |
|       "ĕ" => "e",
 | |
|       "œ" => "oe",
 | |
|       "À" => "A",
 | |
|       "Ô" => "O",
 | |
|       "Ď" => "D",
 | |
|       "Ḟ" => "F",
 | |
|       "Ë" => "E",
 | |
|       "Š" => "S",
 | |
|       "Ơ" => "O",
 | |
|       "Ă" => "A",
 | |
|       "Ř" => "R",
 | |
|       "Ț" => "T",
 | |
|       "Ň" => "N",
 | |
|       "Ā" => "A",
 | |
|       "Ķ" => "K",
 | |
|       "Ŝ" => "S",
 | |
|       "Ỳ" => "Y",
 | |
|       "Ņ" => "N",
 | |
|       "Ĺ" => "L",
 | |
|       "Ħ" => "H",
 | |
|       "Ṗ" => "P",
 | |
|       "Ó" => "O",
 | |
|       "Ú" => "U",
 | |
|       "Ě" => "E",
 | |
|       "É" => "E",
 | |
|       "Ç" => "C",
 | |
|       "Ẁ" => "W",
 | |
|       "Ċ" => "C",
 | |
|       "Õ" => "O",
 | |
|       "Ṡ" => "S",
 | |
|       "Ø" => "O",
 | |
|       "Ģ" => "G",
 | |
|       "Ŧ" => "T",
 | |
|       "Ș" => "S",
 | |
|       "Ė" => "E",
 | |
|       "Ĉ" => "C",
 | |
|       "Ś" => "S",
 | |
|       "Î" => "I",
 | |
|       "Ű" => "U",
 | |
|       "Ć" => "C",
 | |
|       "Ę" => "E",
 | |
|       "Ŵ" => "W",
 | |
|       "Ṫ" => "T",
 | |
|       "Ū" => "U",
 | |
|       "Č" => "C",
 | |
|       "Ö" => "Oe",
 | |
|       "È" => "E",
 | |
|       "Ŷ" => "Y",
 | |
|       "Ą" => "A",
 | |
|       "Ł" => "L",
 | |
|       "Ų" => "U",
 | |
|       "Ů" => "U",
 | |
|       "Ş" => "S",
 | |
|       "Ğ" => "G",
 | |
|       "Ļ" => "L",
 | |
|       "Ƒ" => "F",
 | |
|       "Ž" => "Z",
 | |
|       "Ẃ" => "W",
 | |
|       "Ḃ" => "B",
 | |
|       "Å" => "A",
 | |
|       "Ì" => "I",
 | |
|       "Ï" => "I",
 | |
|       "Ḋ" => "D",
 | |
|       "Ť" => "T",
 | |
|       "Ŗ" => "R",
 | |
|       "Ä" => "Ae",
 | |
|       "Í" => "I",
 | |
|       "Ŕ" => "R",
 | |
|       "Ê" => "E",
 | |
|       "Ü" => "Ue",
 | |
|       "Ò" => "O",
 | |
|       "Ē" => "E",
 | |
|       "Ñ" => "N",
 | |
|       "Ń" => "N",
 | |
|       "Ĥ" => "H",
 | |
|       "Ĝ" => "G",
 | |
|       "Đ" => "D",
 | |
|       "Ĵ" => "J",
 | |
|       "Ÿ" => "Y",
 | |
|       "Ũ" => "U",
 | |
|       "Ŭ" => "U",
 | |
|       "Ư" => "U",
 | |
|       "Ţ" => "T",
 | |
|       "Ý" => "Y",
 | |
|       "Ő" => "O",
 | |
|       "Â" => "A",
 | |
|       "Ľ" => "L",
 | |
|       "Ẅ" => "W",
 | |
|       "Ż" => "Z",
 | |
|       "Ī" => "I",
 | |
|       "Ã" => "A",
 | |
|       "Ġ" => "G",
 | |
|       "Ṁ" => "M",
 | |
|       "Ō" => "O",
 | |
|       "Ĩ" => "I",
 | |
|       "Ù" => "U",
 | |
|       "Į" => "I",
 | |
|       "Ź" => "Z",
 | |
|       "Á" => "A",
 | |
|       "Û" => "U",
 | |
|       "Þ" => "Th",
 | |
|       "Ð" => "Dh",
 | |
|       "Æ" => "Ae",
 | |
|       "Ĕ" => "E",
 | |
|       "Œ" => "Oe",
 | |
|     );
 | |
| 
 | |
|     return new self($this->toUtf8()->replace(array_keys($utf8_accents), array_values($utf8_accents)));
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * Processes the string and replaces all accented UTF-8 characters by unaccented ASCII-7 "equivalents",
 | |
|    * whitespaces are replaced by a pre-defined spacer and the string is lowercase.
 | |
|    *
 | |
|    * @param  string $spacer
 | |
|    * @return TeamSpeak3_Helper_String
 | |
|    */
 | |
|   public function uriSafe($spacer = "-")
 | |
|   {
 | |
|     $this->string = str_replace($spacer, " ", $this->string);
 | |
|     $this->string = $this->transliterate();
 | |
| 		$this->string = preg_replace("/(\s|[^A-Za-z0-9\-])+/", $spacer, trim(strtolower($this->string)));
 | |
| 		$this->string = trim($this->string, $spacer);
 | |
| 
 | |
| 		return new self($this->string);
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * Replaces space characters with percent encoded strings.
 | |
|    *
 | |
|    * @return string
 | |
|    */
 | |
|   public function spaceToPercent()
 | |
|   {
 | |
|     return str_replace(" ", "%20", $this->string);
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * Returns the string as a standard string
 | |
|    *
 | |
|    * @return string
 | |
|    */
 | |
|   public function toString()
 | |
|   {
 | |
|     return $this->string;
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * Magical function that allows you to call PHP's built-in string functions on the TeamSpeak3_Helper_String object.
 | |
|    *
 | |
|    * @param  string $function
 | |
|    * @param  array  $args
 | |
|    * @throws TeamSpeak3_Helper_Exception
 | |
|    * @return TeamSpeak3_Helper_String
 | |
|    */
 | |
|   public function __call($function, $args)
 | |
|   {
 | |
|     if(!function_exists($function))
 | |
|     {
 | |
|       throw new TeamSpeak3_Helper_Exception("cannot call undefined function '" . $function . "' on this object");
 | |
|     }
 | |
| 
 | |
|     if(count($args))
 | |
|     {
 | |
|       if(($key = array_search($this, $args, TRUE)) !== FALSE)
 | |
|       {
 | |
|         $args[$key] = $this->string;
 | |
|       }
 | |
|       else
 | |
|       {
 | |
|         throw new TeamSpeak3_Helper_Exception("cannot call undefined function '" . $function . "' without the " . __CLASS__ . " object parameter");
 | |
|       }
 | |
| 
 | |
|       $return = call_user_func_array($function, $args);
 | |
|     }
 | |
|     else
 | |
|     {
 | |
|       $return = call_user_func($function, $this->string);
 | |
|     }
 | |
| 
 | |
|     if(is_string($return))
 | |
|     {
 | |
|       $this->string = $return;
 | |
|     }
 | |
|     else
 | |
|     {
 | |
|       return $return;
 | |
|     }
 | |
| 
 | |
|     return $this;
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * Returns the character as a standard string.
 | |
|    *
 | |
|    * @return string
 | |
|    */
 | |
|   public function __toString()
 | |
|   {
 | |
|     return (string) $this->string;
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * @ignore
 | |
|    */
 | |
|   public function count()
 | |
|   {
 | |
|     return strlen($this->string);
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * @ignore
 | |
|    */
 | |
|   public function rewind()
 | |
|   {
 | |
|     $this->position = 0;
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * @ignore
 | |
|    */
 | |
|   public function valid()
 | |
|   {
 | |
|     return $this->position < $this->count();
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * @ignore
 | |
|    */
 | |
|   public function key()
 | |
|   {
 | |
|     return $this->position;
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * @ignore
 | |
|    */
 | |
|   public function current()
 | |
|   {
 | |
|     return new TeamSpeak3_Helper_Char($this->string{$this->position});
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * @ignore
 | |
|    */
 | |
|   public function next()
 | |
|   {
 | |
|     $this->position++;
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * @ignore
 | |
|    */
 | |
|   public function offsetExists($offset)
 | |
|   {
 | |
|     return ($offset < strlen($this->string)) ? TRUE : FALSE;
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * @ignore
 | |
|    */
 | |
|   public function offsetGet($offset)
 | |
|   {
 | |
|     return ($this->offsetExists($offset)) ? new TeamSpeak3_Helper_Char($this->string{$offset}) : null;
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * @ignore
 | |
|    */
 | |
|   public function offsetSet($offset, $value)
 | |
|   {
 | |
|     if(!$this->offsetExists($offset)) return;
 | |
| 
 | |
|     $this->string{$offset} = strval($value);
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * @ignore
 | |
|    */
 | |
|   public function offsetUnset($offset)
 | |
|   {
 | |
|     if(!$this->offsetExists($offset)) return;
 | |
| 
 | |
|     $this->string = substr_replace($this->string, "", $offset, 1);
 | |
|   }
 | |
| }
 |