public static function change_encoding($data, $input, $output)
 {
     $input = SimplePie_Misc::encoding($input);
     $output = SimplePie_Misc::encoding($output);
     if ($input === 'US-ASCII') {
         static $non_ascii_octects = '';
         if (!$non_ascii_octects) {
             for ($i = 0x80; $i <= 0xff; $i++) {
                 $non_ascii_octects .= chr($i);
             }
         }
         $data = substr($data, 0, strcspn($data, $non_ascii_octects));
     }
     if ($input === 'windows-1252' && $output === 'UTF-8') {
         return SimplePie_Misc::windows_1252_to_utf8($data);
     } elseif (function_exists('mb_convert_encoding') && ($return = SimplePie_Misc::change_encoding_mbstring($data, $input, $output))) {
         return $return;
     } elseif (function_exists('iconv') && ($return = SimplePie_Misc::change_encoding_iconv($data, $input, $output))) {
         return $return;
     } else {
         return false;
     }
 }
Beispiel #2
0
 /**
  * Change a string from one encoding to another
  *
  * @param string $data Raw data in $input encoding
  * @param string $input Encoding of $data
  * @param string $output Encoding you want
  * @return string|boolean False if we can't convert it
  */
 public static function change_encoding($data, $input, $output)
 {
     $input = SimplePie_Misc::encoding($input);
     $output = SimplePie_Misc::encoding($output);
     // We fail to fail on non US-ASCII bytes
     if ($input === 'US-ASCII') {
         static $non_ascii_octects = '';
         if (!$non_ascii_octects) {
             for ($i = 0x80; $i <= 0xff; $i++) {
                 $non_ascii_octects .= chr($i);
             }
         }
         $data = substr($data, 0, strcspn($data, $non_ascii_octects));
     }
     // This is first, as behaviour of this is completely predictable
     if ($input === 'windows-1252' && $output === 'UTF-8') {
         return SimplePie_Misc::windows_1252_to_utf8($data);
     } elseif (function_exists('mb_convert_encoding') && ($return = SimplePie_Misc::change_encoding_mbstring($data, $input, $output))) {
         return $return;
     } elseif (function_exists('iconv') && ($return = SimplePie_Misc::change_encoding_iconv($data, $input, $output))) {
         return $return;
     } else {
         return false;
     }
 }
	/**
	 * Change a string from one encoding to another
	 *
	 * @param string $data Raw data in $input encoding
	 * @param string $input Encoding of $data
	 * @param string $output Encoding you want
	 * @return string|boolean False if we can't convert it
	 */
	public static function change_encoding($data, $input, $output)
	{
		$input = SimplePie_Misc::encoding($input);
		$output = SimplePie_Misc::encoding($output);

		// We fail to fail on non US-ASCII bytes
		if ($input === 'US-ASCII')
		{
			static $non_ascii_octects = '';
			if (!$non_ascii_octects)
			{
				for ($i = 0x80; $i <= 0xFF; $i++)
				{
					$non_ascii_octects .= chr($i);
				}
			}
			$data = substr($data, 0, strcspn($data, $non_ascii_octects));
		}

		// This is first, as behaviour of this is completely predictable
		if ($input === 'windows-1252' && $output === 'UTF-8')
		{
			return SimplePie_Misc::windows_1252_to_utf8($data);
		}
		// This is second, as behaviour of this varies only with PHP version (the middle part of this expression checks the encoding is supported).
		elseif (function_exists('mb_convert_encoding') && ($return = SimplePie_Misc::change_encoding_mbstring($data, $input, $output)))
		{
			return $return;
 		}
		// This is last, as behaviour of this varies with OS userland and PHP version
		elseif (function_exists('iconv') && ($return = SimplePie_Misc::change_encoding_iconv($data, $input, $output)))
		{
			return $return;
		}
		// If we can't do anything, just fail
		else
		{
			return false;
		}
	}