Mercurial > judyates
view e2gallerypro/e2upload/Backend/Assets/getid3/module.lib.iconv_replacement.php @ 20:1038db2374ec judyates
change address
author | Robert McIntyre <rlm@mit.edu> |
---|---|
date | Sun, 08 Sep 2013 00:47:09 -0400 |
parents | 3f6b44aa6b35 |
children |
line wrap: on
line source
1 <?php2 // +----------------------------------------------------------------------+3 // | PHP version 5 |4 // +----------------------------------------------------------------------+5 // | Copyright (c) 2002-2006 James Heinrich, Allan Hansen |6 // +----------------------------------------------------------------------+7 // | This source file is subject to version 2 of the GPL license, |8 // | that is bundled with this package in the file license.txt and is |9 // | available through the world-wide-web at the following url: |10 // | http://www.gnu.org/copyleft/gpl.html |11 // +----------------------------------------------------------------------+12 // | getID3() - http://getid3.sourceforge.net or http://www.getid3.org |13 // +----------------------------------------------------------------------+14 // | Authors: James Heinrich <infoØgetid3*org> |15 // | Allan Hansen <ahØartemis*dk> |16 // +----------------------------------------------------------------------+17 // | module.lib.iconv_replacement.php |18 // | getID3() library file. |19 // | dependencies: NONE, required by getid3.php if no iconv() present. |20 // +----------------------------------------------------------------------+21 //22 // $Id: module.lib.iconv_replacement.php,v 1.4 2006/11/02 10:48:02 ah Exp $25 class getid3_iconv_replacement26 {28 public static function iconv($in_charset, $out_charset, $string) {30 if ($in_charset == $out_charset) {31 return $string;32 }34 static $supported_charsets = array (35 'ISO-8859-1' => 'iso88591',36 'UTF-8' => 'utf8',37 'UTF-16BE' => 'utf16be',38 'UTF-16LE' => 'utf16le',39 'UTF-16' => 'utf16'40 );42 // Convert43 $function_name = 'iconv_' . @$supported_charsets[$in_charset] . '_' . @$supported_charsets[$out_charset];45 if (is_callable(array('getid3_iconv_replacement', $function_name))) {46 return getid3_iconv_replacement::$function_name($string);47 }49 // Invalid charset used50 if (!@$supported_charsets[$in_charset]) {51 throw new getid3_exception('PHP does not have iconv() support - cannot use ' . $in_charset . ' charset.');52 }54 if (!@$supported_charsets[$out_charset]) {55 throw new getid3_exception('PHP does not have iconv() support - cannot use ' . $out_charset . ' charset.');56 }57 }61 public static function iconv_int_utf8($charval) {62 if ($charval < 128) {63 // 0bbbbbbb64 $newcharstring = chr($charval);65 } elseif ($charval < 2048) {66 // 110bbbbb 10bbbbbb67 $newcharstring = chr(($charval >> 6) | 0xC0);68 $newcharstring .= chr(($charval & 0x3F) | 0x80);69 } elseif ($charval < 65536) {70 // 1110bbbb 10bbbbbb 10bbbbbb71 $newcharstring = chr(($charval >> 12) | 0xE0);72 $newcharstring .= chr(($charval >> 6) | 0xC0);73 $newcharstring .= chr(($charval & 0x3F) | 0x80);74 } else {75 // 11110bbb 10bbbbbb 10bbbbbb 10bbbbbb76 $newcharstring = chr(($charval >> 18) | 0xF0);77 $newcharstring .= chr(($charval >> 12) | 0xC0);78 $newcharstring .= chr(($charval >> 6) | 0xC0);79 $newcharstring .= chr(($charval & 0x3F) | 0x80);80 }81 return $newcharstring;82 }86 // ISO-8859-1 => UTF-887 public static function iconv_iso88591_utf8($string, $bom=false) {88 if (function_exists('utf8_encode')) {89 return utf8_encode($string);90 }91 // utf8_encode() unavailable, use getID3()'s iconv() conversions (possibly PHP is compiled without XML support)92 $newcharstring = '';93 if ($bom) {94 $newcharstring .= "\xEF\xBB\xBF";95 }96 for ($i = 0; $i < strlen($string); $i++) {97 $charval = ord($string{$i});98 $newcharstring .= getid3_iconv_replacement::iconv_int_utf8($charval);99 }100 return $newcharstring;101 }105 // ISO-8859-1 => UTF-16BE106 public static function iconv_iso88591_utf16be($string, $bom=false) {107 $newcharstring = '';108 if ($bom) {109 $newcharstring .= "\xFE\xFF";110 }111 for ($i = 0; $i < strlen($string); $i++) {112 $newcharstring .= "\x00".$string{$i};113 }114 return $newcharstring;115 }119 // ISO-8859-1 => UTF-16LE120 public static function iconv_iso88591_utf16le($string, $bom=false) {121 $newcharstring = '';122 if ($bom) {123 $newcharstring .= "\xFF\xFE";124 }125 for ($i = 0; $i < strlen($string); $i++) {126 $newcharstring .= $string{$i}."\x00";127 }128 return $newcharstring;129 }133 // ISO-8859-1 => UTF-16134 public static function iconv_iso88591_utf16($string) {135 return getid3_lib::iconv_iso88591_utf16le($string, true);136 }140 // UTF-8 => ISO-8859-1141 public static function iconv_utf8_iso88591($string) {142 if (function_exists('utf8_decode')) {143 return utf8_decode($string);144 }145 // utf8_decode() unavailable, use getID3()'s iconv() conversions (possibly PHP is compiled without XML support)146 $newcharstring = '';147 $offset = 0;148 $stringlength = strlen($string);149 while ($offset < $stringlength) {150 if ((ord($string{$offset}) | 0x07) == 0xF7) {151 // 11110bbb 10bbbbbb 10bbbbbb 10bbbbbb152 $charval = ((ord($string{($offset + 0)}) & 0x07) << 18) &153 ((ord($string{($offset + 1)}) & 0x3F) << 12) &154 ((ord($string{($offset + 2)}) & 0x3F) << 6) &155 (ord($string{($offset + 3)}) & 0x3F);156 $offset += 4;157 } elseif ((ord($string{$offset}) | 0x0F) == 0xEF) {158 // 1110bbbb 10bbbbbb 10bbbbbb159 $charval = ((ord($string{($offset + 0)}) & 0x0F) << 12) &160 ((ord($string{($offset + 1)}) & 0x3F) << 6) &161 (ord($string{($offset + 2)}) & 0x3F);162 $offset += 3;163 } elseif ((ord($string{$offset}) | 0x1F) == 0xDF) {164 // 110bbbbb 10bbbbbb165 $charval = ((ord($string{($offset + 0)}) & 0x1F) << 6) &166 (ord($string{($offset + 1)}) & 0x3F);167 $offset += 2;168 } elseif ((ord($string{$offset}) | 0x7F) == 0x7F) {169 // 0bbbbbbb170 $charval = ord($string{$offset});171 $offset += 1;172 } else {173 // error? throw some kind of warning here?174 $charval = false;175 $offset += 1;176 }177 if ($charval !== false) {178 $newcharstring .= (($charval < 256) ? chr($charval) : '?');179 }180 }181 return $newcharstring;182 }186 // UTF-8 => UTF-16BE187 public static function iconv_utf8_utf16be($string, $bom=false) {188 $newcharstring = '';189 if ($bom) {190 $newcharstring .= "\xFE\xFF";191 }192 $offset = 0;193 $stringlength = strlen($string);194 while ($offset < $stringlength) {195 if ((ord($string{$offset}) | 0x07) == 0xF7) {196 // 11110bbb 10bbbbbb 10bbbbbb 10bbbbbb197 $charval = ((ord($string{($offset + 0)}) & 0x07) << 18) &198 ((ord($string{($offset + 1)}) & 0x3F) << 12) &199 ((ord($string{($offset + 2)}) & 0x3F) << 6) &200 (ord($string{($offset + 3)}) & 0x3F);201 $offset += 4;202 } elseif ((ord($string{$offset}) | 0x0F) == 0xEF) {203 // 1110bbbb 10bbbbbb 10bbbbbb204 $charval = ((ord($string{($offset + 0)}) & 0x0F) << 12) &205 ((ord($string{($offset + 1)}) & 0x3F) << 6) &206 (ord($string{($offset + 2)}) & 0x3F);207 $offset += 3;208 } elseif ((ord($string{$offset}) | 0x1F) == 0xDF) {209 // 110bbbbb 10bbbbbb210 $charval = ((ord($string{($offset + 0)}) & 0x1F) << 6) &211 (ord($string{($offset + 1)}) & 0x3F);212 $offset += 2;213 } elseif ((ord($string{$offset}) | 0x7F) == 0x7F) {214 // 0bbbbbbb215 $charval = ord($string{$offset});216 $offset += 1;217 } else {218 // error? throw some kind of warning here?219 $charval = false;220 $offset += 1;221 }222 if ($charval !== false) {223 $newcharstring .= (($charval < 65536) ? getid3_lib::BigEndian2String($charval, 2) : "\x00".'?');224 }225 }226 return $newcharstring;227 }231 // UTF-8 => UTF-16LE232 public static function iconv_utf8_utf16le($string, $bom=false) {233 $newcharstring = '';234 if ($bom) {235 $newcharstring .= "\xFF\xFE";236 }237 $offset = 0;238 $stringlength = strlen($string);239 while ($offset < $stringlength) {240 if ((ord($string{$offset}) | 0x07) == 0xF7) {241 // 11110bbb 10bbbbbb 10bbbbbb 10bbbbbb242 $charval = ((ord($string{($offset + 0)}) & 0x07) << 18) &243 ((ord($string{($offset + 1)}) & 0x3F) << 12) &244 ((ord($string{($offset + 2)}) & 0x3F) << 6) &245 (ord($string{($offset + 3)}) & 0x3F);246 $offset += 4;247 } elseif ((ord($string{$offset}) | 0x0F) == 0xEF) {248 // 1110bbbb 10bbbbbb 10bbbbbb249 $charval = ((ord($string{($offset + 0)}) & 0x0F) << 12) &250 ((ord($string{($offset + 1)}) & 0x3F) << 6) &251 (ord($string{($offset + 2)}) & 0x3F);252 $offset += 3;253 } elseif ((ord($string{$offset}) | 0x1F) == 0xDF) {254 // 110bbbbb 10bbbbbb255 $charval = ((ord($string{($offset + 0)}) & 0x1F) << 6) &256 (ord($string{($offset + 1)}) & 0x3F);257 $offset += 2;258 } elseif ((ord($string{$offset}) | 0x7F) == 0x7F) {259 // 0bbbbbbb260 $charval = ord($string{$offset});261 $offset += 1;262 } else {263 // error? maybe throw some warning here?264 $charval = false;265 $offset += 1;266 }267 if ($charval !== false) {268 $newcharstring .= (($charval < 65536) ? getid3_lib::LittleEndian2String($charval, 2) : '?'."\x00");269 }270 }271 return $newcharstring;272 }276 // UTF-8 => UTF-16277 public static function iconv_utf8_utf16($string) {278 return getid3_lib::iconv_utf8_utf16le($string, true);279 }283 // UTF-16BE => ISO-8859-1284 public static function iconv_utf16be_iso88591($string) {285 if (substr($string, 0, 2) == "\xFE\xFF") {286 // strip BOM287 $string = substr($string, 2);288 }289 $newcharstring = '';290 for ($i = 0; $i < strlen($string); $i += 2) {291 $charval = getid3_lib::BigEndian2Int(substr($string, $i, 2));292 $newcharstring .= (($charval < 256) ? chr($charval) : '?');293 }294 return $newcharstring;295 }299 // UTF-16BE => UTF-8300 public static function iconv_utf16be_utf8($string) {301 if (substr($string, 0, 2) == "\xFE\xFF") {302 // strip BOM303 $string = substr($string, 2);304 }305 $newcharstring = '';306 for ($i = 0; $i < strlen($string); $i += 2) {307 $charval = getid3_lib::BigEndian2Int(substr($string, $i, 2));308 $newcharstring .= getid3_iconv_replacement::iconv_int_utf8($charval);309 }310 return $newcharstring;311 }315 // UTF-16BE => UTF-16LE316 public static function iconv_utf16be_utf16le($string) {317 return getid3_iconv_replacement::iconv_utf8_utf16le(getid3_iconv_replacement::iconv_utf16be_utf8($string));318 }322 // UTF-16BE => UTF-16323 public static function iconv_utf16be_utf16($string) {324 return getid3_iconv_replacement::iconv_utf8_utf16(getid3_iconv_replacement::iconv_utf16be_utf8($string));325 }329 // UTF-16LE => ISO-8859-1330 public static function iconv_utf16le_iso88591($string) {331 if (substr($string, 0, 2) == "\xFF\xFE") {332 // strip BOM333 $string = substr($string, 2);334 }335 $newcharstring = '';336 for ($i = 0; $i < strlen($string); $i += 2) {337 $charval = getid3_lib::LittleEndian2Int(substr($string, $i, 2));338 $newcharstring .= (($charval < 256) ? chr($charval) : '?');339 }340 return $newcharstring;341 }345 // UTF-16LE => UTF-8346 public static function iconv_utf16le_utf8($string) {347 if (substr($string, 0, 2) == "\xFF\xFE") {348 // strip BOM349 $string = substr($string, 2);350 }351 $newcharstring = '';352 for ($i = 0; $i < strlen($string); $i += 2) {353 $charval = getid3_lib::LittleEndian2Int(substr($string, $i, 2));354 $newcharstring .= getid3_iconv_replacement::iconv_int_utf8($charval);355 }356 return $newcharstring;357 }361 // UTF-16LE => UTF-16BE362 public static function iconv_utf16le_utf16be($string) {363 return getid3_iconv_replacement::iconv_utf8_utf16be(getid3_iconv_replacement::iconv_utf16le_utf8($string));364 }368 // UTF-16LE => UTF-16369 public static function iconv_utf16le_utf16($string) {370 return getid3_iconv_replacement::iconv_utf8_utf16(getid3_iconv_replacement::iconv_utf16le_utf8($string));371 }375 // UTF-16 => ISO-8859-1376 public static function iconv_utf16_iso88591($string) {377 $bom = substr($string, 0, 2);378 if ($bom == "\xFE\xFF") {379 return getid3_lib::iconv_utf16be_iso88591(substr($string, 2));380 } elseif ($bom == "\xFF\xFE") {381 return getid3_lib::iconv_utf16le_iso88591(substr($string, 2));382 }383 return $string;384 }388 // UTF-16 => UTF-8389 public static function iconv_utf16_utf8($string) {390 $bom = substr($string, 0, 2);391 if ($bom == "\xFE\xFF") {392 return getid3_iconv_replacement::iconv_utf16be_utf8(substr($string, 2));393 } elseif ($bom == "\xFF\xFE") {394 return getid3_iconv_replacement::iconv_utf16le_utf8(substr($string, 2));395 }396 return $string;397 }401 // UTF-16 => UTF-16BE402 public static function iconv_utf16_utf16be($string) {403 return getid3_iconv_replacement::iconv_utf8_utf16be(getid3_iconv_replacement::iconv_utf16_utf8($string));404 }408 // UTF-16 => UTF-16LE409 public static function iconv_utf16_utf16le($string) {410 return getid3_iconv_replacement::iconv_utf8_utf16le(getid3_iconv_replacement::iconv_utf16_utf8($string));411 }413 }415 ?>