SimplePie_Misc::change_encoding PHP Method

change_encoding() public method

public change_encoding ( $data, $input, $output )
    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') && @mb_convert_encoding("�", 'UTF-16BE', $input) !== "�" && ($return = @mb_convert_encoding($data, $output, $input))) {
            return $return;
        } elseif (function_exists('iconv') && ($return = @iconv($input, $output, $data))) {
            return $return;
        } else {
            return false;
        }
    }

Usage Example

Example #1
0
 /**
  * Detect XML encoding, as per XML 1.0 Appendix F.1
  *
  * @todo Add support for EBCDIC
  * @param string $data XML data
  * @param SimplePie_Registry $registry Class registry
  * @return array Possible encodings
  */
 public static function xml_encoding($data, $registry)
 {
     // UTF-32 Big Endian BOM
     if (substr($data, 0, 4) === "��") {
         $encoding[] = 'UTF-32BE';
     } elseif (substr($data, 0, 4) === "��") {
         $encoding[] = 'UTF-32LE';
     } elseif (substr($data, 0, 2) === "��") {
         $encoding[] = 'UTF-16BE';
     } elseif (substr($data, 0, 2) === "��") {
         $encoding[] = 'UTF-16LE';
     } elseif (substr($data, 0, 3) === "") {
         $encoding[] = 'UTF-8';
     } elseif (substr($data, 0, 20) === "<?xml") {
         if ($pos = strpos($data, "?>")) {
             $parser = $registry->create('XML_Declaration_Parser', array(SimplePie_Misc::change_encoding(substr($data, 20, $pos - 20), 'UTF-32BE', 'UTF-8')));
             if ($parser->parse()) {
                 $encoding[] = $parser->encoding;
             }
         }
         $encoding[] = 'UTF-32BE';
     } elseif (substr($data, 0, 20) === "<?xml") {
         if ($pos = strpos($data, "?>")) {
             $parser = $registry->create('XML_Declaration_Parser', array(SimplePie_Misc::change_encoding(substr($data, 20, $pos - 20), 'UTF-32LE', 'UTF-8')));
             if ($parser->parse()) {
                 $encoding[] = $parser->encoding;
             }
         }
         $encoding[] = 'UTF-32LE';
     } elseif (substr($data, 0, 10) === "<?xml") {
         if ($pos = strpos($data, "?>")) {
             $parser = $registry->create('XML_Declaration_Parser', array(SimplePie_Misc::change_encoding(substr($data, 20, $pos - 10), 'UTF-16BE', 'UTF-8')));
             if ($parser->parse()) {
                 $encoding[] = $parser->encoding;
             }
         }
         $encoding[] = 'UTF-16BE';
     } elseif (substr($data, 0, 10) === "<?xml") {
         if ($pos = strpos($data, "?>")) {
             $parser = $registry->create('XML_Declaration_Parser', array(SimplePie_Misc::change_encoding(substr($data, 20, $pos - 10), 'UTF-16LE', 'UTF-8')));
             if ($parser->parse()) {
                 $encoding[] = $parser->encoding;
             }
         }
         $encoding[] = 'UTF-16LE';
     } elseif (substr($data, 0, 5) === "<?xml") {
         if ($pos = strpos($data, "?>")) {
             $parser = $registry->create('XML_Declaration_Parser', array(substr($data, 5, $pos - 5)));
             if ($parser->parse()) {
                 $encoding[] = $parser->encoding;
             }
         }
         $encoding[] = 'UTF-8';
     } else {
         $encoding[] = 'UTF-8';
     }
     return $encoding;
 }
All Usage Examples Of SimplePie_Misc::change_encoding