Code Search for Developers
 
 
  

module.lib.iconv_replacement.php from ECP (EliteCore Project) at Krugle


Show module.lib.iconv_replacement.php syntax highlighted

<?php
// +----------------------------------------------------------------------+
// | PHP version 5                                                        |
// +----------------------------------------------------------------------+
// | Copyright (c) 2002-2004 James Heinrich                               |
// +----------------------------------------------------------------------+
// | This source file is subject to version 2 of the GPL license,         |
// | that is bundled with this package in the file license.txt and is     |
// | available through the world-wide-web at the following url:           |
// | http://www.gnu.org/copyleft/gpl.html                                 |
// +----------------------------------------------------------------------+
// | getID3() - http://getid3.sourceforge.net or http://www.getid3.org    |
// +----------------------------------------------------------------------+
// | Authors: James Heinrich <infoØgetid3*org>                            |
// |          Allan Hansen <ahØartemis*dk>                                |
// +----------------------------------------------------------------------+
// | module.lib.iconv_replacement.php                                     |
// | getID3() library file.                                               |
// | dependencies: NONE, required by getid3.php if no iconv() present.    |
// +----------------------------------------------------------------------+
//
// $Id: module.lib.iconv_replacement.php,v 1.3 2006/06/24 22:58:31 ah Exp $


class getid3_iconv_replacement
{

    public static function iconv($in_charset, $out_charset, $string) {

        if ($in_charset == $out_charset) {
            return $string;
        }
        
        static $supported_charsets = array (
            'ISO-8859-1'    => 'iso88591', 
            'UTF-8'         => 'utf8',
            'UTF-16BE'      => 'utf16be', 
            'UTF-16LE'      => 'utf16le', 
            'UTF-16'        => 'utf16'
        );

        // Convert
        $function_name = 'iconv_' . @$supported_charsets[$in_charset] . '_' . @$supported_charsets[$out_charset];
        
        if (is_callable(array('getid3_iconv_replacement', $function_name))) {
            return getid3_iconv_replacement::$function_name($string);
        }
        
        // Invalid charset used
        if (!@$supported_charsets[$in_charset]) {
            throw new getid3_exception('PHP does not have iconv() support - cannot use ' . $in_charset . ' charset.');
        }
        
        if (!@$supported_charsets[$out_charset]) {
            throw new getid3_exception('PHP does not have iconv() support - cannot use ' . $out_charset . ' charset.');
        }
    }



    public static function iconv_int_utf8($charval) {
        if ($charval < 128) {
            // 0bbbbbbb
            $newcharstring = chr($charval);
        } elseif ($charval < 2048) {
            // 110bbbbb 10bbbbbb
            $newcharstring  = chr(($charval >> 6) | 0xC0);
            $newcharstring .= chr(($charval & 0x3F) | 0x80);
        } elseif ($charval < 65536) {
            // 1110bbbb 10bbbbbb 10bbbbbb
            $newcharstring  = chr(($charval >> 12) | 0xE0);
            $newcharstring .= chr(($charval >>  6) | 0xC0);
            $newcharstring .= chr(($charval & 0x3F) | 0x80);
        } else {
            // 11110bbb 10bbbbbb 10bbbbbb 10bbbbbb
            $newcharstring  = chr(($charval >> 18) | 0xF0);
            $newcharstring .= chr(($charval >> 12) | 0xC0);
            $newcharstring .= chr(($charval >>  6) | 0xC0);
            $newcharstring .= chr(($charval & 0x3F) | 0x80);
        }
        return $newcharstring;
    }



    // ISO-8859-1 => UTF-8
    public static function iconv_iso88591_utf8($string, $bom=false) {
        if (function_exists('utf8_encode')) {
            return utf8_encode($string);
        }
        // utf8_encode() unavailable, use getID3()'s iconv() conversions (possibly PHP is compiled without XML support)
        $newcharstring = '';
        if ($bom) {
            $newcharstring .= "\xEF\xBB\xBF";
        }
        for ($i = 0; $i < strlen($string); $i++) {
            $charval = ord($string{$i});
            $newcharstring .= getid3_iconv_replacement::iconv_int_utf8($charval);
        }
        return $newcharstring;
    }



    // ISO-8859-1 => UTF-16BE
    public static function iconv_iso88591_utf16be($string, $bom=false) {
        $newcharstring = '';
        if ($bom) {
            $newcharstring .= "\xFE\xFF";
        }
        for ($i = 0; $i < strlen($string); $i++) {
            $newcharstring .= "\x00".$string{$i};
        }
        return $newcharstring;
    }



    // ISO-8859-1 => UTF-16LE
    public static function iconv_iso88591_utf16le($string, $bom=false) {
        $newcharstring = '';
        if ($bom) {
            $newcharstring .= "\xFF\xFE";
        }
        for ($i = 0; $i < strlen($string); $i++) {
            $newcharstring .= $string{$i}."\x00";
        }
        return $newcharstring;
    }



    // ISO-8859-1 => UTF-16
    public static function iconv_iso88591_utf16($string) {
        return getid3_lib::iconv_iso88591_utf16le($string, true);
    }



    // UTF-8 => ISO-8859-1
    public static function iconv_utf8_iso88591($string) {
        if (function_exists('utf8_decode')) {
            return utf8_decode($string);
        }
        // utf8_decode() unavailable, use getID3()'s iconv() conversions (possibly PHP is compiled without XML support)
        $newcharstring = '';
        $offset = 0;
        $stringlength = strlen($string);
        while ($offset < $stringlength) {
            if ((ord($string{$offset}) | 0x07) == 0xF7) {
                // 11110bbb 10bbbbbb 10bbbbbb 10bbbbbb
                $charval = ((ord($string{($offset + 0)}) & 0x07) << 18) &
                           ((ord($string{($offset + 1)}) & 0x3F) << 12) &
                           ((ord($string{($offset + 2)}) & 0x3F) <<  6) &
                            (ord($string{($offset + 3)}) & 0x3F);
                $offset += 4;
            } elseif ((ord($string{$offset}) | 0x0F) == 0xEF) {
                // 1110bbbb 10bbbbbb 10bbbbbb
                $charval = ((ord($string{($offset + 0)}) & 0x0F) << 12) &
                           ((ord($string{($offset + 1)}) & 0x3F) <<  6) &
                            (ord($string{($offset + 2)}) & 0x3F);
                $offset += 3;
            } elseif ((ord($string{$offset}) | 0x1F) == 0xDF) {
                // 110bbbbb 10bbbbbb
                $charval = ((ord($string{($offset + 0)}) & 0x1F) <<  6) &
                            (ord($string{($offset + 1)}) & 0x3F);
                $offset += 2;
            } elseif ((ord($string{$offset}) | 0x7F) == 0x7F) {
                // 0bbbbbbb
                $charval = ord($string{$offset});
                $offset += 1;
            } else {
                // error? throw some kind of warning here?
                $charval = false;
                $offset += 1;
            }
            if ($charval !== false) {
                $newcharstring .= (($charval < 256) ? chr($charval) : '?');
            }
        }
        return $newcharstring;
    }



    // UTF-8 => UTF-16BE
    public static function iconv_utf8_utf16be($string, $bom=false) {
        $newcharstring = '';
        if ($bom) {
            $newcharstring .= "\xFE\xFF";
        }
        $offset = 0;
        $stringlength = strlen($string);
        while ($offset < $stringlength) {
            if ((ord($string{$offset}) | 0x07) == 0xF7) {
                // 11110bbb 10bbbbbb 10bbbbbb 10bbbbbb
                $charval = ((ord($string{($offset + 0)}) & 0x07) << 18) &
                           ((ord($string{($offset + 1)}) & 0x3F) << 12) &
                           ((ord($string{($offset + 2)}) & 0x3F) <<  6) &
                            (ord($string{($offset + 3)}) & 0x3F);
                $offset += 4;
            } elseif ((ord($string{$offset}) | 0x0F) == 0xEF) {
                // 1110bbbb 10bbbbbb 10bbbbbb
                $charval = ((ord($string{($offset + 0)}) & 0x0F) << 12) &
                           ((ord($string{($offset + 1)}) & 0x3F) <<  6) &
                            (ord($string{($offset + 2)}) & 0x3F);
                $offset += 3;
            } elseif ((ord($string{$offset}) | 0x1F) == 0xDF) {
                // 110bbbbb 10bbbbbb
                $charval = ((ord($string{($offset + 0)}) & 0x1F) <<  6) &
                            (ord($string{($offset + 1)}) & 0x3F);
                $offset += 2;
            } elseif ((ord($string{$offset}) | 0x7F) == 0x7F) {
                // 0bbbbbbb
                $charval = ord($string{$offset});
                $offset += 1;
            } else {
                // error? throw some kind of warning here?
                $charval = false;
                $offset += 1;
            }
            if ($charval !== false) {
                $newcharstring .= (($charval < 65536) ? getid3_lib::BigEndian2String($charval, 2) : "\x00".'?');
            }
        }
        return $newcharstring;
    }



    // UTF-8 => UTF-16LE
    public static function iconv_utf8_utf16le($string, $bom=false) {
        $newcharstring = '';
        if ($bom) {
            $newcharstring .= "\xFF\xFE";
        }
        $offset = 0;
        $stringlength = strlen($string);
        while ($offset < $stringlength) {
            if ((ord($string{$offset}) | 0x07) == 0xF7) {
                // 11110bbb 10bbbbbb 10bbbbbb 10bbbbbb
                $charval = ((ord($string{($offset + 0)}) & 0x07) << 18) &
                           ((ord($string{($offset + 1)}) & 0x3F) << 12) &
                           ((ord($string{($offset + 2)}) & 0x3F) <<  6) &
                            (ord($string{($offset + 3)}) & 0x3F);
                $offset += 4;
            } elseif ((ord($string{$offset}) | 0x0F) == 0xEF) {
                // 1110bbbb 10bbbbbb 10bbbbbb
                $charval = ((ord($string{($offset + 0)}) & 0x0F) << 12) &
                           ((ord($string{($offset + 1)}) & 0x3F) <<  6) &
                            (ord($string{($offset + 2)}) & 0x3F);
                $offset += 3;
            } elseif ((ord($string{$offset}) | 0x1F) == 0xDF) {
                // 110bbbbb 10bbbbbb
                $charval = ((ord($string{($offset + 0)}) & 0x1F) <<  6) &
                            (ord($string{($offset + 1)}) & 0x3F);
                $offset += 2;
            } elseif ((ord($string{$offset}) | 0x7F) == 0x7F) {
                // 0bbbbbbb
                $charval = ord($string{$offset});
                $offset += 1;
            } else {
                // error? maybe throw some warning here?
                $charval = false;
                $offset += 1;
            }
            if ($charval !== false) {
                $newcharstring .= (($charval < 65536) ? getid3_lib::LittleEndian2String($charval, 2) : '?'."\x00");
            }
        }
        return $newcharstring;
    }

    
    
    // UTF-8 => UTF-16
    public static function iconv_utf8_utf16($string) {
        return getid3_lib::iconv_utf8_utf16le($string, true);
    }

    
    
    // UTF-16BE => ISO-8859-1
    public static function iconv_utf16be_iso88591($string) {
        if (substr($string, 0, 2) == "\xFE\xFF") {
            // strip BOM
            $string = substr($string, 2);
        }
        $newcharstring = '';
        for ($i = 0; $i < strlen($string); $i += 2) {
            $charval = getid3_lib::BigEndian2Int(substr($string, $i, 2));
            $newcharstring .= (($charval < 256) ? chr($charval) : '?');
        }
        return $newcharstring;
    }

    
    
    // UTF-16BE => UTF-8
    public static function iconv_utf16be_utf8($string) {
        if (substr($string, 0, 2) == "\xFE\xFF") {
            // strip BOM
            $string = substr($string, 2);
        }
        $newcharstring = '';
        for ($i = 0; $i < strlen($string); $i += 2) {
            $charval = getid3_lib::BigEndian2Int(substr($string, $i, 2));
            $newcharstring .= getid3_iconv_replacement::iconv_int_utf8($charval);
        }
        return $newcharstring;
    }
    
    
    
    // UTF-16BE => UTF-16LE
    public static function iconv_utf16be_utf16le($string) {
        return getid3_iconv_replacement::iconv_utf8_utf16le(getid3_iconv_replacement::iconv_utf16be_utf8($string));
    }
    
    
    
    // UTF-16BE => UTF-16
    public static function iconv_utf16be_utf16($string) {
        return getid3_iconv_replacement::iconv_utf8_utf16(getid3_iconv_replacement::iconv_utf16be_utf8($string));
    }
    
    
    
    // UTF-16LE => ISO-8859-1
    public static function iconv_utf16le_iso88591($string) {
        if (substr($string, 0, 2) == "\xFF\xFE") {
            // strip BOM
            $string = substr($string, 2);
        }
        $newcharstring = '';
        for ($i = 0; $i < strlen($string); $i += 2) {
            $charval = getid3_lib::LittleEndian2Int(substr($string, $i, 2));
            $newcharstring .= (($charval < 256) ? chr($charval) : '?');
        }
        return $newcharstring;
    }

    
    
    // UTF-16LE => UTF-8
    public static function iconv_utf16le_utf8($string) {
        if (substr($string, 0, 2) == "\xFF\xFE") {
            // strip BOM
            $string = substr($string, 2);
        }
        $newcharstring = '';
        for ($i = 0; $i < strlen($string); $i += 2) {
            $charval = getid3_lib::LittleEndian2Int(substr($string, $i, 2));
            $newcharstring .= getid3_iconv_replacement::iconv_int_utf8($charval);
        }
        return $newcharstring;
    }

    
    
    // UTF-16LE => UTF-16BE
    public static function iconv_utf16le_utf16be($string) {
        return getid3_iconv_replacement::iconv_utf8_utf16be(getid3_iconv_replacement::iconv_utf16le_utf8($string));
    }
    
    
    
    // UTF-16LE => UTF-16
    public static function iconv_utf16le_utf16($string) {
        return getid3_iconv_replacement::iconv_utf8_utf16(getid3_iconv_replacement::iconv_utf16le_utf8($string));
    }
    
    
    
    // UTF-16 => ISO-8859-1
    public static function iconv_utf16_iso88591($string) {
        $bom = substr($string, 0, 2);
        if ($bom == "\xFE\xFF") {
            return getid3_lib::iconv_utf16be_iso88591(substr($string, 2));
        } elseif ($bom == "\xFF\xFE") {
            return getid3_lib::iconv_utf16le_iso88591(substr($string, 2));
        }
        return $string;
    }

    
    
    // UTF-16 => UTF-8
    public static function iconv_utf16_utf8($string) {
        $bom = substr($string, 0, 2);
        if ($bom == "\xFE\xFF") {
            return getid3_iconv_replacement::iconv_utf16be_utf8(substr($string, 2));
        } elseif ($bom == "\xFF\xFE") {
            return getid3_iconv_replacement::iconv_utf16le_utf8(substr($string, 2));
        }
        return $string;
    }
    
    
    
    // UTF-16 => UTF-16BE
    public static function iconv_utf16_utf16be($string) {
        return getid3_iconv_replacement::iconv_utf8_utf16be(getid3_iconv_replacement::iconv_utf16_utf8($string));
    }
    
    
    
    // UTF-16 => UTF-16LE
    public static function iconv_utf16_utf16le($string) {
        return getid3_iconv_replacement::iconv_utf8_utf16le(getid3_iconv_replacement::iconv_utf16_utf8($string));
    }

}

?>



See more files for this project here

ECP (EliteCore Project)

EliteCore Project is a PHP5.1/Javascript/AJAX/XHTML/CSS framework for creating WEB 2.0 applications and services.The basic open-source instalation can be also used as an interactive personal page or BLOG.This project uses the latest features available.

Project homepage: http://sourceforge.net/projects/elitecore
Programming language(s): JavaScript,PHP,XML
License: cpl

  extension.cache.dbm.php
  extension.cache.mysql.php
  getid3.php
  module.archive.gzip.php
  module.archive.szip.php
  module.archive.tar.php
  module.archive.zip.php
  module.audio-video.asf.php
  module.audio-video.flv.php
  module.audio-video.mpeg.php
  module.audio-video.nsv.php
  module.audio-video.quicktime.php
  module.audio-video.real.php
  module.audio-video.riff.php
  module.audio-video.swf.php
  module.audio.aac_adif.php
  module.audio.aac_adts.php
  module.audio.ac3.php
  module.audio.au.php
  module.audio.avr.php
  module.audio.bonk.php
  module.audio.la.php
  module.audio.lpac.php
  module.audio.midi.php
  module.audio.monkey.php
  module.audio.mp3.php
  module.audio.mpc.php
  module.audio.mpc_old.php
  module.audio.optimfrog.php
  module.audio.rkau.php
  module.audio.shorten.php
  module.audio.tta.php
  module.audio.voc.php
  module.audio.vqf.php
  module.audio.wavpack.php
  module.audio.xiph.php
  module.graphic.bmp.php
  module.graphic.gif.php
  module.graphic.jpeg.php
  module.graphic.pcd.php
  module.graphic.png.php
  module.graphic.tiff.php
  module.lib.data_hash.php
  module.lib.iconv_replacement.php
  module.lib.image_size.php
  module.misc.iso.php
  module.tag.apetag.php
  module.tag.id3v1.php
  module.tag.id3v2.php
  module.tag.lyrics3.php