[ Index ] |
PHP Cross Reference of Unnamed Project |
[Summary view] [Print] [Text view]
1 <?php 2 /** 3 * SimplePie 4 * 5 * A PHP-Based RSS and Atom Feed Framework. 6 * Takes the hard work out of managing a complete RSS/Atom solution. 7 * 8 * Copyright (c) 2004-2012, Ryan Parman, Geoffrey Sneddon, Ryan McCue, and contributors 9 * All rights reserved. 10 * 11 * Redistribution and use in source and binary forms, with or without modification, are 12 * permitted provided that the following conditions are met: 13 * 14 * * Redistributions of source code must retain the above copyright notice, this list of 15 * conditions and the following disclaimer. 16 * 17 * * Redistributions in binary form must reproduce the above copyright notice, this list 18 * of conditions and the following disclaimer in the documentation and/or other materials 19 * provided with the distribution. 20 * 21 * * Neither the name of the SimplePie Team nor the names of its contributors may be used 22 * to endorse or promote products derived from this software without specific prior 23 * written permission. 24 * 25 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS 26 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY 27 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS 28 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 29 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 30 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 31 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 32 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 33 * POSSIBILITY OF SUCH DAMAGE. 34 * 35 * @package SimplePie 36 * @version 1.3.1 37 * @copyright 2004-2012 Ryan Parman, Geoffrey Sneddon, Ryan McCue 38 * @author Ryan Parman 39 * @author Geoffrey Sneddon 40 * @author Ryan McCue 41 * @link http://simplepie.org/ SimplePie 42 * @license http://www.opensource.org/licenses/bsd-license.php BSD License 43 */ 44 45 /** 46 * Miscellanous utilities 47 * 48 * @package SimplePie 49 */ 50 class SimplePie_Misc 51 { 52 public static function time_hms($seconds) 53 { 54 $time = ''; 55 56 $hours = floor($seconds / 3600); 57 $remainder = $seconds % 3600; 58 if ($hours > 0) 59 { 60 $time .= $hours.':'; 61 } 62 63 $minutes = floor($remainder / 60); 64 $seconds = $remainder % 60; 65 if ($minutes < 10 && $hours > 0) 66 { 67 $minutes = '0' . $minutes; 68 } 69 if ($seconds < 10) 70 { 71 $seconds = '0' . $seconds; 72 } 73 74 $time .= $minutes.':'; 75 $time .= $seconds; 76 77 return $time; 78 } 79 80 public static function absolutize_url($relative, $base) 81 { 82 $iri = SimplePie_IRI::absolutize(new SimplePie_IRI($base), $relative); 83 if ($iri === false) 84 { 85 return false; 86 } 87 return $iri->get_uri(); 88 } 89 90 /** 91 * Get a HTML/XML element from a HTML string 92 * 93 * @deprecated Use DOMDocument instead (parsing HTML with regex is bad!) 94 * @param string $realname Element name (including namespace prefix if applicable) 95 * @param string $string HTML document 96 * @return array 97 */ 98 public static function get_element($realname, $string) 99 { 100 $return = array(); 101 $name = preg_quote($realname, '/'); 102 if (preg_match_all("/<($name)" . SIMPLEPIE_PCRE_HTML_ATTRIBUTE . "(>(.*)<\/$name>|(\/)?>)/siU", $string, $matches, PREG_SET_ORDER | PREG_OFFSET_CAPTURE)) 103 { 104 for ($i = 0, $total_matches = count($matches); $i < $total_matches; $i++) 105 { 106 $return[$i]['tag'] = $realname; 107 $return[$i]['full'] = $matches[$i][0][0]; 108 $return[$i]['offset'] = $matches[$i][0][1]; 109 if (strlen($matches[$i][3][0]) <= 2) 110 { 111 $return[$i]['self_closing'] = true; 112 } 113 else 114 { 115 $return[$i]['self_closing'] = false; 116 $return[$i]['content'] = $matches[$i][4][0]; 117 } 118 $return[$i]['attribs'] = array(); 119 if (isset($matches[$i][2][0]) && preg_match_all('/[\x09\x0A\x0B\x0C\x0D\x20]+([^\x09\x0A\x0B\x0C\x0D\x20\x2F\x3E][^\x09\x0A\x0B\x0C\x0D\x20\x2F\x3D\x3E]*)(?:[\x09\x0A\x0B\x0C\x0D\x20]*=[\x09\x0A\x0B\x0C\x0D\x20]*(?:"([^"]*)"|\'([^\']*)\'|([^\x09\x0A\x0B\x0C\x0D\x20\x22\x27\x3E][^\x09\x0A\x0B\x0C\x0D\x20\x3E]*)?))?/', ' ' . $matches[$i][2][0] . ' ', $attribs, PREG_SET_ORDER)) 120 { 121 for ($j = 0, $total_attribs = count($attribs); $j < $total_attribs; $j++) 122 { 123 if (count($attribs[$j]) === 2) 124 { 125 $attribs[$j][2] = $attribs[$j][1]; 126 } 127 $return[$i]['attribs'][strtolower($attribs[$j][1])]['data'] = SimplePie_Misc::entities_decode(end($attribs[$j]), 'UTF-8'); 128 } 129 } 130 } 131 } 132 return $return; 133 } 134 135 public static function element_implode($element) 136 { 137 $full = "<$element[tag]"; 138 foreach ($element['attribs'] as $key => $value) 139 { 140 $key = strtolower($key); 141 $full .= " $key=\"" . htmlspecialchars($value['data']) . '"'; 142 } 143 if ($element['self_closing']) 144 { 145 $full .= ' />'; 146 } 147 else 148 { 149 $full .= ">$element[content]</$element[tag]>"; 150 } 151 return $full; 152 } 153 154 public static function error($message, $level, $file, $line) 155 { 156 if ((ini_get('error_reporting') & $level) > 0) 157 { 158 switch ($level) 159 { 160 case E_USER_ERROR: 161 $note = 'PHP Error'; 162 break; 163 case E_USER_WARNING: 164 $note = 'PHP Warning'; 165 break; 166 case E_USER_NOTICE: 167 $note = 'PHP Notice'; 168 break; 169 default: 170 $note = 'Unknown Error'; 171 break; 172 } 173 174 $log_error = true; 175 if (!function_exists('error_log')) 176 { 177 $log_error = false; 178 } 179 180 $log_file = @ini_get('error_log'); 181 if (!empty($log_file) && ('syslog' !== $log_file) && !@is_writable($log_file)) 182 { 183 $log_error = false; 184 } 185 186 if ($log_error) 187 { 188 @error_log("$note: $message in $file on line $line", 0); 189 } 190 } 191 192 return $message; 193 } 194 195 public static function fix_protocol($url, $http = 1) 196 { 197 $url = SimplePie_Misc::normalize_url($url); 198 $parsed = SimplePie_Misc::parse_url($url); 199 if ($parsed['scheme'] !== '' && $parsed['scheme'] !== 'http' && $parsed['scheme'] !== 'https') 200 { 201 return SimplePie_Misc::fix_protocol(SimplePie_Misc::compress_parse_url('http', $parsed['authority'], $parsed['path'], $parsed['query'], $parsed['fragment']), $http); 202 } 203 204 if ($parsed['scheme'] === '' && $parsed['authority'] === '' && !file_exists($url)) 205 { 206 return SimplePie_Misc::fix_protocol(SimplePie_Misc::compress_parse_url('http', $parsed['path'], '', $parsed['query'], $parsed['fragment']), $http); 207 } 208 209 if ($http === 2 && $parsed['scheme'] !== '') 210 { 211 return "feed:$url"; 212 } 213 elseif ($http === 3 && strtolower($parsed['scheme']) === 'http') 214 { 215 return substr_replace($url, 'podcast', 0, 4); 216 } 217 elseif ($http === 4 && strtolower($parsed['scheme']) === 'http') 218 { 219 return substr_replace($url, 'itpc', 0, 4); 220 } 221 else 222 { 223 return $url; 224 } 225 } 226 227 public static function parse_url($url) 228 { 229 $iri = new SimplePie_IRI($url); 230 return array( 231 'scheme' => (string) $iri->scheme, 232 'authority' => (string) $iri->authority, 233 'path' => (string) $iri->path, 234 'query' => (string) $iri->query, 235 'fragment' => (string) $iri->fragment 236 ); 237 } 238 239 public static function compress_parse_url($scheme = '', $authority = '', $path = '', $query = '', $fragment = '') 240 { 241 $iri = new SimplePie_IRI(''); 242 $iri->scheme = $scheme; 243 $iri->authority = $authority; 244 $iri->path = $path; 245 $iri->query = $query; 246 $iri->fragment = $fragment; 247 return $iri->get_uri(); 248 } 249 250 public static function normalize_url($url) 251 { 252 $iri = new SimplePie_IRI($url); 253 return $iri->get_uri(); 254 } 255 256 public static function percent_encoding_normalization($match) 257 { 258 $integer = hexdec($match[1]); 259 if ($integer >= 0x41 && $integer <= 0x5A || $integer >= 0x61 && $integer <= 0x7A || $integer >= 0x30 && $integer <= 0x39 || $integer === 0x2D || $integer === 0x2E || $integer === 0x5F || $integer === 0x7E) 260 { 261 return chr($integer); 262 } 263 else 264 { 265 return strtoupper($match[0]); 266 } 267 } 268 269 /** 270 * Converts a Windows-1252 encoded string to a UTF-8 encoded string 271 * 272 * @static 273 * @param string $string Windows-1252 encoded string 274 * @return string UTF-8 encoded string 275 */ 276 public static function windows_1252_to_utf8($string) 277 { 278 static $convert_table = array("\x80" => "\xE2\x82\xAC", "\x81" => "\xEF\xBF\xBD", "\x82" => "\xE2\x80\x9A", "\x83" => "\xC6\x92", "\x84" => "\xE2\x80\x9E", "\x85" => "\xE2\x80\xA6", "\x86" => "\xE2\x80\xA0", "\x87" => "\xE2\x80\xA1", "\x88" => "\xCB\x86", "\x89" => "\xE2\x80\xB0", "\x8A" => "\xC5\xA0", "\x8B" => "\xE2\x80\xB9", "\x8C" => "\xC5\x92", "\x8D" => "\xEF\xBF\xBD", "\x8E" => "\xC5\xBD", "\x8F" => "\xEF\xBF\xBD", "\x90" => "\xEF\xBF\xBD", "\x91" => "\xE2\x80\x98", "\x92" => "\xE2\x80\x99", "\x93" => "\xE2\x80\x9C", "\x94" => "\xE2\x80\x9D", "\x95" => "\xE2\x80\xA2", "\x96" => "\xE2\x80\x93", "\x97" => "\xE2\x80\x94", "\x98" => "\xCB\x9C", "\x99" => "\xE2\x84\xA2", "\x9A" => "\xC5\xA1", "\x9B" => "\xE2\x80\xBA", "\x9C" => "\xC5\x93", "\x9D" => "\xEF\xBF\xBD", "\x9E" => "\xC5\xBE", "\x9F" => "\xC5\xB8", "\xA0" => "\xC2\xA0", "\xA1" => "\xC2\xA1", "\xA2" => "\xC2\xA2", "\xA3" => "\xC2\xA3", "\xA4" => "\xC2\xA4", "\xA5" => "\xC2\xA5", "\xA6" => "\xC2\xA6", "\xA7" => "\xC2\xA7", "\xA8" => "\xC2\xA8", "\xA9" => "\xC2\xA9", "\xAA" => "\xC2\xAA", "\xAB" => "\xC2\xAB", "\xAC" => "\xC2\xAC", "\xAD" => "\xC2\xAD", "\xAE" => "\xC2\xAE", "\xAF" => "\xC2\xAF", "\xB0" => "\xC2\xB0", "\xB1" => "\xC2\xB1", "\xB2" => "\xC2\xB2", "\xB3" => "\xC2\xB3", "\xB4" => "\xC2\xB4", "\xB5" => "\xC2\xB5", "\xB6" => "\xC2\xB6", "\xB7" => "\xC2\xB7", "\xB8" => "\xC2\xB8", "\xB9" => "\xC2\xB9", "\xBA" => "\xC2\xBA", "\xBB" => "\xC2\xBB", "\xBC" => "\xC2\xBC", "\xBD" => "\xC2\xBD", "\xBE" => "\xC2\xBE", "\xBF" => "\xC2\xBF", "\xC0" => "\xC3\x80", "\xC1" => "\xC3\x81", "\xC2" => "\xC3\x82", "\xC3" => "\xC3\x83", "\xC4" => "\xC3\x84", "\xC5" => "\xC3\x85", "\xC6" => "\xC3\x86", "\xC7" => "\xC3\x87", "\xC8" => "\xC3\x88", "\xC9" => "\xC3\x89", "\xCA" => "\xC3\x8A", "\xCB" => "\xC3\x8B", "\xCC" => "\xC3\x8C", "\xCD" => "\xC3\x8D", "\xCE" => "\xC3\x8E", "\xCF" => "\xC3\x8F", "\xD0" => "\xC3\x90", "\xD1" => "\xC3\x91", "\xD2" => "\xC3\x92", "\xD3" => "\xC3\x93", "\xD4" => "\xC3\x94", "\xD5" => "\xC3\x95", "\xD6" => "\xC3\x96", "\xD7" => "\xC3\x97", "\xD8" => "\xC3\x98", "\xD9" => "\xC3\x99", "\xDA" => "\xC3\x9A", "\xDB" => "\xC3\x9B", "\xDC" => "\xC3\x9C", "\xDD" => "\xC3\x9D", "\xDE" => "\xC3\x9E", "\xDF" => "\xC3\x9F", "\xE0" => "\xC3\xA0", "\xE1" => "\xC3\xA1", "\xE2" => "\xC3\xA2", "\xE3" => "\xC3\xA3", "\xE4" => "\xC3\xA4", "\xE5" => "\xC3\xA5", "\xE6" => "\xC3\xA6", "\xE7" => "\xC3\xA7", "\xE8" => "\xC3\xA8", "\xE9" => "\xC3\xA9", "\xEA" => "\xC3\xAA", "\xEB" => "\xC3\xAB", "\xEC" => "\xC3\xAC", "\xED" => "\xC3\xAD", "\xEE" => "\xC3\xAE", "\xEF" => "\xC3\xAF", "\xF0" => "\xC3\xB0", "\xF1" => "\xC3\xB1", "\xF2" => "\xC3\xB2", "\xF3" => "\xC3\xB3", "\xF4" => "\xC3\xB4", "\xF5" => "\xC3\xB5", "\xF6" => "\xC3\xB6", "\xF7" => "\xC3\xB7", "\xF8" => "\xC3\xB8", "\xF9" => "\xC3\xB9", "\xFA" => "\xC3\xBA", "\xFB" => "\xC3\xBB", "\xFC" => "\xC3\xBC", "\xFD" => "\xC3\xBD", "\xFE" => "\xC3\xBE", "\xFF" => "\xC3\xBF"); 279 280 return strtr($string, $convert_table); 281 } 282 283 /** 284 * Change a string from one encoding to another 285 * 286 * @param string $data Raw data in $input encoding 287 * @param string $input Encoding of $data 288 * @param string $output Encoding you want 289 * @return string|boolean False if we can't convert it 290 */ 291 public static function change_encoding($data, $input, $output) 292 { 293 $input = SimplePie_Misc::encoding($input); 294 $output = SimplePie_Misc::encoding($output); 295 296 // We fail to fail on non US-ASCII bytes 297 if ($input === 'US-ASCII') 298 { 299 static $non_ascii_octects = ''; 300 if (!$non_ascii_octects) 301 { 302 for ($i = 0x80; $i <= 0xFF; $i++) 303 { 304 $non_ascii_octects .= chr($i); 305 } 306 } 307 $data = substr($data, 0, strcspn($data, $non_ascii_octects)); 308 } 309 310 // This is first, as behaviour of this is completely predictable 311 if ($input === 'windows-1252' && $output === 'UTF-8') 312 { 313 return SimplePie_Misc::windows_1252_to_utf8($data); 314 } 315 // This is second, as behaviour of this varies only with PHP version (the middle part of this expression checks the encoding is supported). 316 elseif (function_exists('mb_convert_encoding') && ($return = SimplePie_Misc::change_encoding_mbstring($data, $input, $output))) 317 { 318 return $return; 319 } 320 // This is last, as behaviour of this varies with OS userland and PHP version 321 elseif (function_exists('iconv') && ($return = SimplePie_Misc::change_encoding_iconv($data, $input, $output))) 322 { 323 return $return; 324 } 325 // If we can't do anything, just fail 326 else 327 { 328 return false; 329 } 330 } 331 332 protected static function change_encoding_mbstring($data, $input, $output) 333 { 334 if ($input === 'windows-949') 335 { 336 $input = 'EUC-KR'; 337 } 338 if ($output === 'windows-949') 339 { 340 $output = 'EUC-KR'; 341 } 342 if ($input === 'Windows-31J') 343 { 344 $input = 'SJIS'; 345 } 346 if ($output === 'Windows-31J') 347 { 348 $output = 'SJIS'; 349 } 350 351 // Check that the encoding is supported 352 if (@mb_convert_encoding("\x80", 'UTF-16BE', $input) === "\x00\x80") 353 { 354 return false; 355 } 356 if (!in_array($input, mb_list_encodings())) 357 { 358 return false; 359 } 360 361 // Let's do some conversion 362 if ($return = @mb_convert_encoding($data, $output, $input)) 363 { 364 return $return; 365 } 366 367 return false; 368 } 369 370 protected static function change_encoding_iconv($data, $input, $output) 371 { 372 return @iconv($input, $output, $data); 373 } 374 375 /** 376 * Normalize an encoding name 377 * 378 * This is automatically generated by create.php 379 * 380 * To generate it, run `php create.php` on the command line, and copy the 381 * output to replace this function. 382 * 383 * @param string $charset Character set to standardise 384 * @return string Standardised name 385 */ 386 public static function encoding($charset) 387 { 388 // Normalization from UTS #22 389 switch (strtolower(preg_replace('/(?:[^a-zA-Z0-9]+|([^0-9])0+)/', '\1', $charset))) 390 { 391 case 'adobestandardencoding': 392 case 'csadobestandardencoding': 393 return 'Adobe-Standard-Encoding'; 394 395 case 'adobesymbolencoding': 396 case 'cshppsmath': 397 return 'Adobe-Symbol-Encoding'; 398 399 case 'ami1251': 400 case 'amiga1251': 401 return 'Amiga-1251'; 402 403 case 'ansix31101983': 404 case 'csat5001983': 405 case 'csiso99naplps': 406 case 'isoir99': 407 case 'naplps': 408 return 'ANSI_X3.110-1983'; 409 410 case 'arabic7': 411 case 'asmo449': 412 case 'csiso89asmo449': 413 case 'iso9036': 414 case 'isoir89': 415 return 'ASMO_449'; 416 417 case 'big5': 418 case 'csbig5': 419 return 'Big5'; 420 421 case 'big5hkscs': 422 return 'Big5-HKSCS'; 423 424 case 'bocu1': 425 case 'csbocu1': 426 return 'BOCU-1'; 427 428 case 'brf': 429 case 'csbrf': 430 return 'BRF'; 431 432 case 'bs4730': 433 case 'csiso4unitedkingdom': 434 case 'gb': 435 case 'iso646gb': 436 case 'isoir4': 437 case 'uk': 438 return 'BS_4730'; 439 440 case 'bsviewdata': 441 case 'csiso47bsviewdata': 442 case 'isoir47': 443 return 'BS_viewdata'; 444 445 case 'cesu8': 446 case 'cscesu8': 447 return 'CESU-8'; 448 449 case 'ca': 450 case 'csa71': 451 case 'csaz243419851': 452 case 'csiso121canadian1': 453 case 'iso646ca': 454 case 'isoir121': 455 return 'CSA_Z243.4-1985-1'; 456 457 case 'csa72': 458 case 'csaz243419852': 459 case 'csiso122canadian2': 460 case 'iso646ca2': 461 case 'isoir122': 462 return 'CSA_Z243.4-1985-2'; 463 464 case 'csaz24341985gr': 465 case 'csiso123csaz24341985gr': 466 case 'isoir123': 467 return 'CSA_Z243.4-1985-gr'; 468 469 case 'csiso139csn369103': 470 case 'csn369103': 471 case 'isoir139': 472 return 'CSN_369103'; 473 474 case 'csdecmcs': 475 case 'dec': 476 case 'decmcs': 477 return 'DEC-MCS'; 478 479 case 'csiso21german': 480 case 'de': 481 case 'din66003': 482 case 'iso646de': 483 case 'isoir21': 484 return 'DIN_66003'; 485 486 case 'csdkus': 487 case 'dkus': 488 return 'dk-us'; 489 490 case 'csiso646danish': 491 case 'dk': 492 case 'ds2089': 493 case 'iso646dk': 494 return 'DS_2089'; 495 496 case 'csibmebcdicatde': 497 case 'ebcdicatde': 498 return 'EBCDIC-AT-DE'; 499 500 case 'csebcdicatdea': 501 case 'ebcdicatdea': 502 return 'EBCDIC-AT-DE-A'; 503 504 case 'csebcdiccafr': 505 case 'ebcdiccafr': 506 return 'EBCDIC-CA-FR'; 507 508 case 'csebcdicdkno': 509 case 'ebcdicdkno': 510 return 'EBCDIC-DK-NO'; 511 512 case 'csebcdicdknoa': 513 case 'ebcdicdknoa': 514 return 'EBCDIC-DK-NO-A'; 515 516 case 'csebcdices': 517 case 'ebcdices': 518 return 'EBCDIC-ES'; 519 520 case 'csebcdicesa': 521 case 'ebcdicesa': 522 return 'EBCDIC-ES-A'; 523 524 case 'csebcdicess': 525 case 'ebcdicess': 526 return 'EBCDIC-ES-S'; 527 528 case 'csebcdicfise': 529 case 'ebcdicfise': 530 return 'EBCDIC-FI-SE'; 531 532 case 'csebcdicfisea': 533 case 'ebcdicfisea': 534 return 'EBCDIC-FI-SE-A'; 535 536 case 'csebcdicfr': 537 case 'ebcdicfr': 538 return 'EBCDIC-FR'; 539 540 case 'csebcdicit': 541 case 'ebcdicit': 542 return 'EBCDIC-IT'; 543 544 case 'csebcdicpt': 545 case 'ebcdicpt': 546 return 'EBCDIC-PT'; 547 548 case 'csebcdicuk': 549 case 'ebcdicuk': 550 return 'EBCDIC-UK'; 551 552 case 'csebcdicus': 553 case 'ebcdicus': 554 return 'EBCDIC-US'; 555 556 case 'csiso111ecmacyrillic': 557 case 'ecmacyrillic': 558 case 'isoir111': 559 case 'koi8e': 560 return 'ECMA-cyrillic'; 561 562 case 'csiso17spanish': 563 case 'es': 564 case 'iso646es': 565 case 'isoir17': 566 return 'ES'; 567 568 case 'csiso85spanish2': 569 case 'es2': 570 case 'iso646es2': 571 case 'isoir85': 572 return 'ES2'; 573 574 case 'cseucpkdfmtjapanese': 575 case 'eucjp': 576 case 'extendedunixcodepackedformatforjapanese': 577 return 'EUC-JP'; 578 579 case 'cseucfixwidjapanese': 580 case 'extendedunixcodefixedwidthforjapanese': 581 return 'Extended_UNIX_Code_Fixed_Width_for_Japanese'; 582 583 case 'gb18030': 584 return 'GB18030'; 585 586 case 'chinese': 587 case 'cp936': 588 case 'csgb2312': 589 case 'csiso58gb231280': 590 case 'gb2312': 591 case 'gb231280': 592 case 'gbk': 593 case 'isoir58': 594 case 'ms936': 595 case 'windows936': 596 return 'GBK'; 597 598 case 'cn': 599 case 'csiso57gb1988': 600 case 'gb198880': 601 case 'iso646cn': 602 case 'isoir57': 603 return 'GB_1988-80'; 604 605 case 'csiso153gost1976874': 606 case 'gost1976874': 607 case 'isoir153': 608 case 'stsev35888': 609 return 'GOST_19768-74'; 610 611 case 'csiso150': 612 case 'csiso150greekccitt': 613 case 'greekccitt': 614 case 'isoir150': 615 return 'greek-ccitt'; 616 617 case 'csiso88greek7': 618 case 'greek7': 619 case 'isoir88': 620 return 'greek7'; 621 622 case 'csiso18greek7old': 623 case 'greek7old': 624 case 'isoir18': 625 return 'greek7-old'; 626 627 case 'cshpdesktop': 628 case 'hpdesktop': 629 return 'HP-DeskTop'; 630 631 case 'cshplegal': 632 case 'hplegal': 633 return 'HP-Legal'; 634 635 case 'cshpmath8': 636 case 'hpmath8': 637 return 'HP-Math8'; 638 639 case 'cshppifont': 640 case 'hppifont': 641 return 'HP-Pi-font'; 642 643 case 'cshproman8': 644 case 'hproman8': 645 case 'r8': 646 case 'roman8': 647 return 'hp-roman8'; 648 649 case 'hzgb2312': 650 return 'HZ-GB-2312'; 651 652 case 'csibmsymbols': 653 case 'ibmsymbols': 654 return 'IBM-Symbols'; 655 656 case 'csibmthai': 657 case 'ibmthai': 658 return 'IBM-Thai'; 659 660 case 'cp37': 661 case 'csibm37': 662 case 'ebcdiccpca': 663 case 'ebcdiccpnl': 664 case 'ebcdiccpus': 665 case 'ebcdiccpwt': 666 case 'ibm37': 667 return 'IBM037'; 668 669 case 'cp38': 670 case 'csibm38': 671 case 'ebcdicint': 672 case 'ibm38': 673 return 'IBM038'; 674 675 case 'cp273': 676 case 'csibm273': 677 case 'ibm273': 678 return 'IBM273'; 679 680 case 'cp274': 681 case 'csibm274': 682 case 'ebcdicbe': 683 case 'ibm274': 684 return 'IBM274'; 685 686 case 'cp275': 687 case 'csibm275': 688 case 'ebcdicbr': 689 case 'ibm275': 690 return 'IBM275'; 691 692 case 'csibm277': 693 case 'ebcdiccpdk': 694 case 'ebcdiccpno': 695 case 'ibm277': 696 return 'IBM277'; 697 698 case 'cp278': 699 case 'csibm278': 700 case 'ebcdiccpfi': 701 case 'ebcdiccpse': 702 case 'ibm278': 703 return 'IBM278'; 704 705 case 'cp280': 706 case 'csibm280': 707 case 'ebcdiccpit': 708 case 'ibm280': 709 return 'IBM280'; 710 711 case 'cp281': 712 case 'csibm281': 713 case 'ebcdicjpe': 714 case 'ibm281': 715 return 'IBM281'; 716 717 case 'cp284': 718 case 'csibm284': 719 case 'ebcdiccpes': 720 case 'ibm284': 721 return 'IBM284'; 722 723 case 'cp285': 724 case 'csibm285': 725 case 'ebcdiccpgb': 726 case 'ibm285': 727 return 'IBM285'; 728 729 case 'cp290': 730 case 'csibm290': 731 case 'ebcdicjpkana': 732 case 'ibm290': 733 return 'IBM290'; 734 735 case 'cp297': 736 case 'csibm297': 737 case 'ebcdiccpfr': 738 case 'ibm297': 739 return 'IBM297'; 740 741 case 'cp420': 742 case 'csibm420': 743 case 'ebcdiccpar1': 744 case 'ibm420': 745 return 'IBM420'; 746 747 case 'cp423': 748 case 'csibm423': 749 case 'ebcdiccpgr': 750 case 'ibm423': 751 return 'IBM423'; 752 753 case 'cp424': 754 case 'csibm424': 755 case 'ebcdiccphe': 756 case 'ibm424': 757 return 'IBM424'; 758 759 case '437': 760 case 'cp437': 761 case 'cspc8codepage437': 762 case 'ibm437': 763 return 'IBM437'; 764 765 case 'cp500': 766 case 'csibm500': 767 case 'ebcdiccpbe': 768 case 'ebcdiccpch': 769 case 'ibm500': 770 return 'IBM500'; 771 772 case 'cp775': 773 case 'cspc775baltic': 774 case 'ibm775': 775 return 'IBM775'; 776 777 case '850': 778 case 'cp850': 779 case 'cspc850multilingual': 780 case 'ibm850': 781 return 'IBM850'; 782 783 case '851': 784 case 'cp851': 785 case 'csibm851': 786 case 'ibm851': 787 return 'IBM851'; 788 789 case '852': 790 case 'cp852': 791 case 'cspcp852': 792 case 'ibm852': 793 return 'IBM852'; 794 795 case '855': 796 case 'cp855': 797 case 'csibm855': 798 case 'ibm855': 799 return 'IBM855'; 800 801 case '857': 802 case 'cp857': 803 case 'csibm857': 804 case 'ibm857': 805 return 'IBM857'; 806 807 case 'ccsid858': 808 case 'cp858': 809 case 'ibm858': 810 case 'pcmultilingual850euro': 811 return 'IBM00858'; 812 813 case '860': 814 case 'cp860': 815 case 'csibm860': 816 case 'ibm860': 817 return 'IBM860'; 818 819 case '861': 820 case 'cp861': 821 case 'cpis': 822 case 'csibm861': 823 case 'ibm861': 824 return 'IBM861'; 825 826 case '862': 827 case 'cp862': 828 case 'cspc862latinhebrew': 829 case 'ibm862': 830 return 'IBM862'; 831 832 case '863': 833 case 'cp863': 834 case 'csibm863': 835 case 'ibm863': 836 return 'IBM863'; 837 838 case 'cp864': 839 case 'csibm864': 840 case 'ibm864': 841 return 'IBM864'; 842 843 case '865': 844 case 'cp865': 845 case 'csibm865': 846 case 'ibm865': 847 return 'IBM865'; 848 849 case '866': 850 case 'cp866': 851 case 'csibm866': 852 case 'ibm866': 853 return 'IBM866'; 854 855 case 'cp868': 856 case 'cpar': 857 case 'csibm868': 858 case 'ibm868': 859 return 'IBM868'; 860 861 case '869': 862 case 'cp869': 863 case 'cpgr': 864 case 'csibm869': 865 case 'ibm869': 866 return 'IBM869'; 867 868 case 'cp870': 869 case 'csibm870': 870 case 'ebcdiccproece': 871 case 'ebcdiccpyu': 872 case 'ibm870': 873 return 'IBM870'; 874 875 case 'cp871': 876 case 'csibm871': 877 case 'ebcdiccpis': 878 case 'ibm871': 879 return 'IBM871'; 880 881 case 'cp880': 882 case 'csibm880': 883 case 'ebcdiccyrillic': 884 case 'ibm880': 885 return 'IBM880'; 886 887 case 'cp891': 888 case 'csibm891': 889 case 'ibm891': 890 return 'IBM891'; 891 892 case 'cp903': 893 case 'csibm903': 894 case 'ibm903': 895 return 'IBM903'; 896 897 case '904': 898 case 'cp904': 899 case 'csibbm904': 900 case 'ibm904': 901 return 'IBM904'; 902 903 case 'cp905': 904 case 'csibm905': 905 case 'ebcdiccptr': 906 case 'ibm905': 907 return 'IBM905'; 908 909 case 'cp918': 910 case 'csibm918': 911 case 'ebcdiccpar2': 912 case 'ibm918': 913 return 'IBM918'; 914 915 case 'ccsid924': 916 case 'cp924': 917 case 'ebcdiclatin9euro': 918 case 'ibm924': 919 return 'IBM00924'; 920 921 case 'cp1026': 922 case 'csibm1026': 923 case 'ibm1026': 924 return 'IBM1026'; 925 926 case 'ibm1047': 927 return 'IBM1047'; 928 929 case 'ccsid1140': 930 case 'cp1140': 931 case 'ebcdicus37euro': 932 case 'ibm1140': 933 return 'IBM01140'; 934 935 case 'ccsid1141': 936 case 'cp1141': 937 case 'ebcdicde273euro': 938 case 'ibm1141': 939 return 'IBM01141'; 940 941 case 'ccsid1142': 942 case 'cp1142': 943 case 'ebcdicdk277euro': 944 case 'ebcdicno277euro': 945 case 'ibm1142': 946 return 'IBM01142'; 947 948 case 'ccsid1143': 949 case 'cp1143': 950 case 'ebcdicfi278euro': 951 case 'ebcdicse278euro': 952 case 'ibm1143': 953 return 'IBM01143'; 954 955 case 'ccsid1144': 956 case 'cp1144': 957 case 'ebcdicit280euro': 958 case 'ibm1144': 959 return 'IBM01144'; 960 961 case 'ccsid1145': 962 case 'cp1145': 963 case 'ebcdices284euro': 964 case 'ibm1145': 965 return 'IBM01145'; 966 967 case 'ccsid1146': 968 case 'cp1146': 969 case 'ebcdicgb285euro': 970 case 'ibm1146': 971 return 'IBM01146'; 972 973 case 'ccsid1147': 974 case 'cp1147': 975 case 'ebcdicfr297euro': 976 case 'ibm1147': 977 return 'IBM01147'; 978 979 case 'ccsid1148': 980 case 'cp1148': 981 case 'ebcdicinternational500euro': 982 case 'ibm1148': 983 return 'IBM01148'; 984 985 case 'ccsid1149': 986 case 'cp1149': 987 case 'ebcdicis871euro': 988 case 'ibm1149': 989 return 'IBM01149'; 990 991 case 'csiso143iecp271': 992 case 'iecp271': 993 case 'isoir143': 994 return 'IEC_P27-1'; 995 996 case 'csiso49inis': 997 case 'inis': 998 case 'isoir49': 999 return 'INIS'; 1000 1001 case 'csiso50inis8': 1002 case 'inis8': 1003 case 'isoir50': 1004 return 'INIS-8'; 1005 1006 case 'csiso51iniscyrillic': 1007 case 'iniscyrillic': 1008 case 'isoir51': 1009 return 'INIS-cyrillic'; 1010 1011 case 'csinvariant': 1012 case 'invariant': 1013 return 'INVARIANT'; 1014 1015 case 'iso2022cn': 1016 return 'ISO-2022-CN'; 1017 1018 case 'iso2022cnext': 1019 return 'ISO-2022-CN-EXT'; 1020 1021 case 'csiso2022jp': 1022 case 'iso2022jp': 1023 return 'ISO-2022-JP'; 1024 1025 case 'csiso2022jp2': 1026 case 'iso2022jp2': 1027 return 'ISO-2022-JP-2'; 1028 1029 case 'csiso2022kr': 1030 case 'iso2022kr': 1031 return 'ISO-2022-KR'; 1032 1033 case 'cswindows30latin1': 1034 case 'iso88591windows30latin1': 1035 return 'ISO-8859-1-Windows-3.0-Latin-1'; 1036 1037 case 'cswindows31latin1': 1038 case 'iso88591windows31latin1': 1039 return 'ISO-8859-1-Windows-3.1-Latin-1'; 1040 1041 case 'csisolatin2': 1042 case 'iso88592': 1043 case 'iso885921987': 1044 case 'isoir101': 1045 case 'l2': 1046 case 'latin2': 1047 return 'ISO-8859-2'; 1048 1049 case 'cswindows31latin2': 1050 case 'iso88592windowslatin2': 1051 return 'ISO-8859-2-Windows-Latin-2'; 1052 1053 case 'csisolatin3': 1054 case 'iso88593': 1055 case 'iso885931988': 1056 case 'isoir109': 1057 case 'l3': 1058 case 'latin3': 1059 return 'ISO-8859-3'; 1060 1061 case 'csisolatin4': 1062 case 'iso88594': 1063 case 'iso885941988': 1064 case 'isoir110': 1065 case 'l4': 1066 case 'latin4': 1067 return 'ISO-8859-4'; 1068 1069 case 'csisolatincyrillic': 1070 case 'cyrillic': 1071 case 'iso88595': 1072 case 'iso885951988': 1073 case 'isoir144': 1074 return 'ISO-8859-5'; 1075 1076 case 'arabic': 1077 case 'asmo708': 1078 case 'csisolatinarabic': 1079 case 'ecma114': 1080 case 'iso88596': 1081 case 'iso885961987': 1082 case 'isoir127': 1083 return 'ISO-8859-6'; 1084 1085 case 'csiso88596e': 1086 case 'iso88596e': 1087 return 'ISO-8859-6-E'; 1088 1089 case 'csiso88596i': 1090 case 'iso88596i': 1091 return 'ISO-8859-6-I'; 1092 1093 case 'csisolatingreek': 1094 case 'ecma118': 1095 case 'elot928': 1096 case 'greek': 1097 case 'greek8': 1098 case 'iso88597': 1099 case 'iso885971987': 1100 case 'isoir126': 1101 return 'ISO-8859-7'; 1102 1103 case 'csisolatinhebrew': 1104 case 'hebrew': 1105 case 'iso88598': 1106 case 'iso885981988': 1107 case 'isoir138': 1108 return 'ISO-8859-8'; 1109 1110 case 'csiso88598e': 1111 case 'iso88598e': 1112 return 'ISO-8859-8-E'; 1113 1114 case 'csiso88598i': 1115 case 'iso88598i': 1116 return 'ISO-8859-8-I'; 1117 1118 case 'cswindows31latin5': 1119 case 'iso88599windowslatin5': 1120 return 'ISO-8859-9-Windows-Latin-5'; 1121 1122 case 'csisolatin6': 1123 case 'iso885910': 1124 case 'iso8859101992': 1125 case 'isoir157': 1126 case 'l6': 1127 case 'latin6': 1128 return 'ISO-8859-10'; 1129 1130 case 'iso885913': 1131 return 'ISO-8859-13'; 1132 1133 case 'iso885914': 1134 case 'iso8859141998': 1135 case 'isoceltic': 1136 case 'isoir199': 1137 case 'l8': 1138 case 'latin8': 1139 return 'ISO-8859-14'; 1140 1141 case 'iso885915': 1142 case 'latin9': 1143 return 'ISO-8859-15'; 1144 1145 case 'iso885916': 1146 case 'iso8859162001': 1147 case 'isoir226': 1148 case 'l10': 1149 case 'latin10': 1150 return 'ISO-8859-16'; 1151 1152 case 'iso10646j1': 1153 return 'ISO-10646-J-1'; 1154 1155 case 'csunicode': 1156 case 'iso10646ucs2': 1157 return 'ISO-10646-UCS-2'; 1158 1159 case 'csucs4': 1160 case 'iso10646ucs4': 1161 return 'ISO-10646-UCS-4'; 1162 1163 case 'csunicodeascii': 1164 case 'iso10646ucsbasic': 1165 return 'ISO-10646-UCS-Basic'; 1166 1167 case 'csunicodelatin1': 1168 case 'iso10646': 1169 case 'iso10646unicodelatin1': 1170 return 'ISO-10646-Unicode-Latin1'; 1171 1172 case 'csiso10646utf1': 1173 case 'iso10646utf1': 1174 return 'ISO-10646-UTF-1'; 1175 1176 case 'csiso115481': 1177 case 'iso115481': 1178 case 'isotr115481': 1179 return 'ISO-11548-1'; 1180 1181 case 'csiso90': 1182 case 'isoir90': 1183 return 'iso-ir-90'; 1184 1185 case 'csunicodeibm1261': 1186 case 'isounicodeibm1261': 1187 return 'ISO-Unicode-IBM-1261'; 1188 1189 case 'csunicodeibm1264': 1190 case 'isounicodeibm1264': 1191 return 'ISO-Unicode-IBM-1264'; 1192 1193 case 'csunicodeibm1265': 1194 case 'isounicodeibm1265': 1195 return 'ISO-Unicode-IBM-1265'; 1196 1197 case 'csunicodeibm1268': 1198 case 'isounicodeibm1268': 1199 return 'ISO-Unicode-IBM-1268'; 1200 1201 case 'csunicodeibm1276': 1202 case 'isounicodeibm1276': 1203 return 'ISO-Unicode-IBM-1276'; 1204 1205 case 'csiso646basic1983': 1206 case 'iso646basic1983': 1207 case 'ref': 1208 return 'ISO_646.basic:1983'; 1209 1210 case 'csiso2intlrefversion': 1211 case 'irv': 1212 case 'iso646irv1983': 1213 case 'isoir2': 1214 return 'ISO_646.irv:1983'; 1215 1216 case 'csiso2033': 1217 case 'e13b': 1218 case 'iso20331983': 1219 case 'isoir98': 1220 return 'ISO_2033-1983'; 1221 1222 case 'csiso5427cyrillic': 1223 case 'iso5427': 1224 case 'isoir37': 1225 return 'ISO_5427'; 1226 1227 case 'iso5427cyrillic1981': 1228 case 'iso54271981': 1229 case 'isoir54': 1230 return 'ISO_5427:1981'; 1231 1232 case 'csiso5428greek': 1233 case 'iso54281980': 1234 case 'isoir55': 1235 return 'ISO_5428:1980'; 1236 1237 case 'csiso6937add': 1238 case 'iso6937225': 1239 case 'isoir152': 1240 return 'ISO_6937-2-25'; 1241 1242 case 'csisotextcomm': 1243 case 'iso69372add': 1244 case 'isoir142': 1245 return 'ISO_6937-2-add'; 1246 1247 case 'csiso8859supp': 1248 case 'iso8859supp': 1249 case 'isoir154': 1250 case 'latin125': 1251 return 'ISO_8859-supp'; 1252 1253 case 'csiso10367box': 1254 case 'iso10367box': 1255 case 'isoir155': 1256 return 'ISO_10367-box'; 1257 1258 case 'csiso15italian': 1259 case 'iso646it': 1260 case 'isoir15': 1261 case 'it': 1262 return 'IT'; 1263 1264 case 'csiso13jisc6220jp': 1265 case 'isoir13': 1266 case 'jisc62201969': 1267 case 'jisc62201969jp': 1268 case 'katakana': 1269 case 'x2017': 1270 return 'JIS_C6220-1969-jp'; 1271 1272 case 'csiso14jisc6220ro': 1273 case 'iso646jp': 1274 case 'isoir14': 1275 case 'jisc62201969ro': 1276 case 'jp': 1277 return 'JIS_C6220-1969-ro'; 1278 1279 case 'csiso42jisc62261978': 1280 case 'isoir42': 1281 case 'jisc62261978': 1282 return 'JIS_C6226-1978'; 1283 1284 case 'csiso87jisx208': 1285 case 'isoir87': 1286 case 'jisc62261983': 1287 case 'jisx2081983': 1288 case 'x208': 1289 return 'JIS_C6226-1983'; 1290 1291 case 'csiso91jisc62291984a': 1292 case 'isoir91': 1293 case 'jisc62291984a': 1294 case 'jpocra': 1295 return 'JIS_C6229-1984-a'; 1296 1297 case 'csiso92jisc62991984b': 1298 case 'iso646jpocrb': 1299 case 'isoir92': 1300 case 'jisc62291984b': 1301 case 'jpocrb': 1302 return 'JIS_C6229-1984-b'; 1303 1304 case 'csiso93jis62291984badd': 1305 case 'isoir93': 1306 case 'jisc62291984badd': 1307 case 'jpocrbadd': 1308 return 'JIS_C6229-1984-b-add'; 1309 1310 case 'csiso94jis62291984hand': 1311 case 'isoir94': 1312 case 'jisc62291984hand': 1313 case 'jpocrhand': 1314 return 'JIS_C6229-1984-hand'; 1315 1316 case 'csiso95jis62291984handadd': 1317 case 'isoir95': 1318 case 'jisc62291984handadd': 1319 case 'jpocrhandadd': 1320 return 'JIS_C6229-1984-hand-add'; 1321 1322 case 'csiso96jisc62291984kana': 1323 case 'isoir96': 1324 case 'jisc62291984kana': 1325 return 'JIS_C6229-1984-kana'; 1326 1327 case 'csjisencoding': 1328 case 'jisencoding': 1329 return 'JIS_Encoding'; 1330 1331 case 'cshalfwidthkatakana': 1332 case 'jisx201': 1333 case 'x201': 1334 return 'JIS_X0201'; 1335 1336 case 'csiso159jisx2121990': 1337 case 'isoir159': 1338 case 'jisx2121990': 1339 case 'x212': 1340 return 'JIS_X0212-1990'; 1341 1342 case 'csiso141jusib1002': 1343 case 'iso646yu': 1344 case 'isoir141': 1345 case 'js': 1346 case 'jusib1002': 1347 case 'yu': 1348 return 'JUS_I.B1.002'; 1349 1350 case 'csiso147macedonian': 1351 case 'isoir147': 1352 case 'jusib1003mac': 1353 case 'macedonian': 1354 return 'JUS_I.B1.003-mac'; 1355 1356 case 'csiso146serbian': 1357 case 'isoir146': 1358 case 'jusib1003serb': 1359 case 'serbian': 1360 return 'JUS_I.B1.003-serb'; 1361 1362 case 'koi7switched': 1363 return 'KOI7-switched'; 1364 1365 case 'cskoi8r': 1366 case 'koi8r': 1367 return 'KOI8-R'; 1368 1369 case 'koi8u': 1370 return 'KOI8-U'; 1371 1372 case 'csksc5636': 1373 case 'iso646kr': 1374 case 'ksc5636': 1375 return 'KSC5636'; 1376 1377 case 'cskz1048': 1378 case 'kz1048': 1379 case 'rk1048': 1380 case 'strk10482002': 1381 return 'KZ-1048'; 1382 1383 case 'csiso19latingreek': 1384 case 'isoir19': 1385 case 'latingreek': 1386 return 'latin-greek'; 1387 1388 case 'csiso27latingreek1': 1389 case 'isoir27': 1390 case 'latingreek1': 1391 return 'Latin-greek-1'; 1392 1393 case 'csiso158lap': 1394 case 'isoir158': 1395 case 'lap': 1396 case 'latinlap': 1397 return 'latin-lap'; 1398 1399 case 'csmacintosh': 1400 case 'mac': 1401 case 'macintosh': 1402 return 'macintosh'; 1403 1404 case 'csmicrosoftpublishing': 1405 case 'microsoftpublishing': 1406 return 'Microsoft-Publishing'; 1407 1408 case 'csmnem': 1409 case 'mnem': 1410 return 'MNEM'; 1411 1412 case 'csmnemonic': 1413 case 'mnemonic': 1414 return 'MNEMONIC'; 1415 1416 case 'csiso86hungarian': 1417 case 'hu': 1418 case 'iso646hu': 1419 case 'isoir86': 1420 case 'msz77953': 1421 return 'MSZ_7795.3'; 1422 1423 case 'csnatsdano': 1424 case 'isoir91': 1425 case 'natsdano': 1426 return 'NATS-DANO'; 1427 1428 case 'csnatsdanoadd': 1429 case 'isoir92': 1430 case 'natsdanoadd': 1431 return 'NATS-DANO-ADD'; 1432 1433 case 'csnatssefi': 1434 case 'isoir81': 1435 case 'natssefi': 1436 return 'NATS-SEFI'; 1437 1438 case 'csnatssefiadd': 1439 case 'isoir82': 1440 case 'natssefiadd': 1441 return 'NATS-SEFI-ADD'; 1442 1443 case 'csiso151cuba': 1444 case 'cuba': 1445 case 'iso646cu': 1446 case 'isoir151': 1447 case 'ncnc1081': 1448 return 'NC_NC00-10:81'; 1449 1450 case 'csiso69french': 1451 case 'fr': 1452 case 'iso646fr': 1453 case 'isoir69': 1454 case 'nfz62010': 1455 return 'NF_Z_62-010'; 1456 1457 case 'csiso25french': 1458 case 'iso646fr1': 1459 case 'isoir25': 1460 case 'nfz620101973': 1461 return 'NF_Z_62-010_(1973)'; 1462 1463 case 'csiso60danishnorwegian': 1464 case 'csiso60norwegian1': 1465 case 'iso646no': 1466 case 'isoir60': 1467 case 'no': 1468 case 'ns45511': 1469 return 'NS_4551-1'; 1470 1471 case 'csiso61norwegian2': 1472 case 'iso646no2': 1473 case 'isoir61': 1474 case 'no2': 1475 case 'ns45512': 1476 return 'NS_4551-2'; 1477 1478 case 'osdebcdicdf3irv': 1479 return 'OSD_EBCDIC_DF03_IRV'; 1480 1481 case 'osdebcdicdf41': 1482 return 'OSD_EBCDIC_DF04_1'; 1483 1484 case 'osdebcdicdf415': 1485 return 'OSD_EBCDIC_DF04_15'; 1486 1487 case 'cspc8danishnorwegian': 1488 case 'pc8danishnorwegian': 1489 return 'PC8-Danish-Norwegian'; 1490 1491 case 'cspc8turkish': 1492 case 'pc8turkish': 1493 return 'PC8-Turkish'; 1494 1495 case 'csiso16portuguese': 1496 case 'iso646pt': 1497 case 'isoir16': 1498 case 'pt': 1499 return 'PT'; 1500 1501 case 'csiso84portuguese2': 1502 case 'iso646pt2': 1503 case 'isoir84': 1504 case 'pt2': 1505 return 'PT2'; 1506 1507 case 'cp154': 1508 case 'csptcp154': 1509 case 'cyrillicasian': 1510 case 'pt154': 1511 case 'ptcp154': 1512 return 'PTCP154'; 1513 1514 case 'scsu': 1515 return 'SCSU'; 1516 1517 case 'csiso10swedish': 1518 case 'fi': 1519 case 'iso646fi': 1520 case 'iso646se': 1521 case 'isoir10': 1522 case 'se': 1523 case 'sen850200b': 1524 return 'SEN_850200_B'; 1525 1526 case 'csiso11swedishfornames': 1527 case 'iso646se2': 1528 case 'isoir11': 1529 case 'se2': 1530 case 'sen850200c': 1531 return 'SEN_850200_C'; 1532 1533 case 'csiso102t617bit': 1534 case 'isoir102': 1535 case 't617bit': 1536 return 'T.61-7bit'; 1537 1538 case 'csiso103t618bit': 1539 case 'isoir103': 1540 case 't61': 1541 case 't618bit': 1542 return 'T.61-8bit'; 1543 1544 case 'csiso128t101g2': 1545 case 'isoir128': 1546 case 't101g2': 1547 return 'T.101-G2'; 1548 1549 case 'cstscii': 1550 case 'tscii': 1551 return 'TSCII'; 1552 1553 case 'csunicode11': 1554 case 'unicode11': 1555 return 'UNICODE-1-1'; 1556 1557 case 'csunicode11utf7': 1558 case 'unicode11utf7': 1559 return 'UNICODE-1-1-UTF-7'; 1560 1561 case 'csunknown8bit': 1562 case 'unknown8bit': 1563 return 'UNKNOWN-8BIT'; 1564 1565 case 'ansix341968': 1566 case 'ansix341986': 1567 case 'ascii': 1568 case 'cp367': 1569 case 'csascii': 1570 case 'ibm367': 1571 case 'iso646irv1991': 1572 case 'iso646us': 1573 case 'isoir6': 1574 case 'us': 1575 case 'usascii': 1576 return 'US-ASCII'; 1577 1578 case 'csusdk': 1579 case 'usdk': 1580 return 'us-dk'; 1581 1582 case 'utf7': 1583 return 'UTF-7'; 1584 1585 case 'utf8': 1586 return 'UTF-8'; 1587 1588 case 'utf16': 1589 return 'UTF-16'; 1590 1591 case 'utf16be': 1592 return 'UTF-16BE'; 1593 1594 case 'utf16le': 1595 return 'UTF-16LE'; 1596 1597 case 'utf32': 1598 return 'UTF-32'; 1599 1600 case 'utf32be': 1601 return 'UTF-32BE'; 1602 1603 case 'utf32le': 1604 return 'UTF-32LE'; 1605 1606 case 'csventurainternational': 1607 case 'venturainternational': 1608 return 'Ventura-International'; 1609 1610 case 'csventuramath': 1611 case 'venturamath': 1612 return 'Ventura-Math'; 1613 1614 case 'csventuraus': 1615 case 'venturaus': 1616 return 'Ventura-US'; 1617 1618 case 'csiso70videotexsupp1': 1619 case 'isoir70': 1620 case 'videotexsuppl': 1621 return 'videotex-suppl'; 1622 1623 case 'csviqr': 1624 case 'viqr': 1625 return 'VIQR'; 1626 1627 case 'csviscii': 1628 case 'viscii': 1629 return 'VISCII'; 1630 1631 case 'csshiftjis': 1632 case 'cswindows31j': 1633 case 'mskanji': 1634 case 'shiftjis': 1635 case 'windows31j': 1636 return 'Windows-31J'; 1637 1638 case 'iso885911': 1639 case 'tis620': 1640 return 'windows-874'; 1641 1642 case 'cseuckr': 1643 case 'csksc56011987': 1644 case 'euckr': 1645 case 'isoir149': 1646 case 'korean': 1647 case 'ksc5601': 1648 case 'ksc56011987': 1649 case 'ksc56011989': 1650 case 'windows949': 1651 return 'windows-949'; 1652 1653 case 'windows1250': 1654 return 'windows-1250'; 1655 1656 case 'windows1251': 1657 return 'windows-1251'; 1658 1659 case 'cp819': 1660 case 'csisolatin1': 1661 case 'ibm819': 1662 case 'iso88591': 1663 case 'iso885911987': 1664 case 'isoir100': 1665 case 'l1': 1666 case 'latin1': 1667 case 'windows1252': 1668 return 'windows-1252'; 1669 1670 case 'windows1253': 1671 return 'windows-1253'; 1672 1673 case 'csisolatin5': 1674 case 'iso88599': 1675 case 'iso885991989': 1676 case 'isoir148': 1677 case 'l5': 1678 case 'latin5': 1679 case 'windows1254': 1680 return 'windows-1254'; 1681 1682 case 'windows1255': 1683 return 'windows-1255'; 1684 1685 case 'windows1256': 1686 return 'windows-1256'; 1687 1688 case 'windows1257': 1689 return 'windows-1257'; 1690 1691 case 'windows1258': 1692 return 'windows-1258'; 1693 1694 default: 1695 return $charset; 1696 } 1697 } 1698 1699 public static function get_curl_version() 1700 { 1701 if (is_array($curl = curl_version())) 1702 { 1703 $curl = $curl['version']; 1704 } 1705 elseif (substr($curl, 0, 5) === 'curl/') 1706 { 1707 $curl = substr($curl, 5, strcspn($curl, "\x09\x0A\x0B\x0C\x0D", 5)); 1708 } 1709 elseif (substr($curl, 0, 8) === 'libcurl/') 1710 { 1711 $curl = substr($curl, 8, strcspn($curl, "\x09\x0A\x0B\x0C\x0D", 8)); 1712 } 1713 else 1714 { 1715 $curl = 0; 1716 } 1717 return $curl; 1718 } 1719 1720 /** 1721 * Strip HTML comments 1722 * 1723 * @param string $data Data to strip comments from 1724 * @return string Comment stripped string 1725 */ 1726 public static function strip_comments($data) 1727 { 1728 $output = ''; 1729 while (($start = strpos($data, '<!--')) !== false) 1730 { 1731 $output .= substr($data, 0, $start); 1732 if (($end = strpos($data, '-->', $start)) !== false) 1733 { 1734 $data = substr_replace($data, '', 0, $end + 3); 1735 } 1736 else 1737 { 1738 $data = ''; 1739 } 1740 } 1741 return $output . $data; 1742 } 1743 1744 public static function parse_date($dt) 1745 { 1746 $parser = SimplePie_Parse_Date::get(); 1747 return $parser->parse($dt); 1748 } 1749 1750 /** 1751 * Decode HTML entities 1752 * 1753 * @deprecated Use DOMDocument instead 1754 * @param string $data Input data 1755 * @return string Output data 1756 */ 1757 public static function entities_decode($data) 1758 { 1759 $decoder = new SimplePie_Decode_HTML_Entities($data); 1760 return $decoder->parse(); 1761 } 1762 1763 /** 1764 * Remove RFC822 comments 1765 * 1766 * @param string $data Data to strip comments from 1767 * @return string Comment stripped string 1768 */ 1769 public static function uncomment_rfc822($string) 1770 { 1771 $string = (string) $string; 1772 $position = 0; 1773 $length = strlen($string); 1774 $depth = 0; 1775 1776 $output = ''; 1777 1778 while ($position < $length && ($pos = strpos($string, '(', $position)) !== false) 1779 { 1780 $output .= substr($string, $position, $pos - $position); 1781 $position = $pos + 1; 1782 if ($string[$pos - 1] !== '\\') 1783 { 1784 $depth++; 1785 while ($depth && $position < $length) 1786 { 1787 $position += strcspn($string, '()', $position); 1788 if ($string[$position - 1] === '\\') 1789 { 1790 $position++; 1791 continue; 1792 } 1793 elseif (isset($string[$position])) 1794 { 1795 switch ($string[$position]) 1796 { 1797 case '(': 1798 $depth++; 1799 break; 1800 1801 case ')': 1802 $depth--; 1803 break; 1804 } 1805 $position++; 1806 } 1807 else 1808 { 1809 break; 1810 } 1811 } 1812 } 1813 else 1814 { 1815 $output .= '('; 1816 } 1817 } 1818 $output .= substr($string, $position); 1819 1820 return $output; 1821 } 1822 1823 public static function parse_mime($mime) 1824 { 1825 if (($pos = strpos($mime, ';')) === false) 1826 { 1827 return trim($mime); 1828 } 1829 else 1830 { 1831 return trim(substr($mime, 0, $pos)); 1832 } 1833 } 1834 1835 public static function atom_03_construct_type($attribs) 1836 { 1837 if (isset($attribs['']['mode']) && strtolower(trim($attribs['']['mode']) === 'base64')) 1838 { 1839 $mode = SIMPLEPIE_CONSTRUCT_BASE64; 1840 } 1841 else 1842 { 1843 $mode = SIMPLEPIE_CONSTRUCT_NONE; 1844 } 1845 if (isset($attribs['']['type'])) 1846 { 1847 switch (strtolower(trim($attribs['']['type']))) 1848 { 1849 case 'text': 1850 case 'text/plain': 1851 return SIMPLEPIE_CONSTRUCT_TEXT | $mode; 1852 1853 case 'html': 1854 case 'text/html': 1855 return SIMPLEPIE_CONSTRUCT_HTML | $mode; 1856 1857 case 'xhtml': 1858 case 'application/xhtml+xml': 1859 return SIMPLEPIE_CONSTRUCT_XHTML | $mode; 1860 1861 default: 1862 return SIMPLEPIE_CONSTRUCT_NONE | $mode; 1863 } 1864 } 1865 else 1866 { 1867 return SIMPLEPIE_CONSTRUCT_TEXT | $mode; 1868 } 1869 } 1870 1871 public static function atom_10_construct_type($attribs) 1872 { 1873 if (isset($attribs['']['type'])) 1874 { 1875 switch (strtolower(trim($attribs['']['type']))) 1876 { 1877 case 'text': 1878 return SIMPLEPIE_CONSTRUCT_TEXT; 1879 1880 case 'html': 1881 return SIMPLEPIE_CONSTRUCT_HTML; 1882 1883 case 'xhtml': 1884 return SIMPLEPIE_CONSTRUCT_XHTML; 1885 1886 default: 1887 return SIMPLEPIE_CONSTRUCT_NONE; 1888 } 1889 } 1890 return SIMPLEPIE_CONSTRUCT_TEXT; 1891 } 1892 1893 public static function atom_10_content_construct_type($attribs) 1894 { 1895 if (isset($attribs['']['type'])) 1896 { 1897 $type = strtolower(trim($attribs['']['type'])); 1898 switch ($type) 1899 { 1900 case 'text': 1901 return SIMPLEPIE_CONSTRUCT_TEXT; 1902 1903 case 'html': 1904 return SIMPLEPIE_CONSTRUCT_HTML; 1905 1906 case 'xhtml': 1907 return SIMPLEPIE_CONSTRUCT_XHTML; 1908 } 1909 if (in_array(substr($type, -4), array('+xml', '/xml')) || substr($type, 0, 5) === 'text/') 1910 { 1911 return SIMPLEPIE_CONSTRUCT_NONE; 1912 } 1913 else 1914 { 1915 return SIMPLEPIE_CONSTRUCT_BASE64; 1916 } 1917 } 1918 else 1919 { 1920 return SIMPLEPIE_CONSTRUCT_TEXT; 1921 } 1922 } 1923 1924 public static function is_isegment_nz_nc($string) 1925 { 1926 return (bool) preg_match('/^([A-Za-z0-9\-._~\x{A0}-\x{D7FF}\x{F900}-\x{FDCF}\x{FDF0}-\x{FFEF}\x{10000}-\x{1FFFD}\x{20000}-\x{2FFFD}\x{30000}-\x{3FFFD}\x{40000}-\x{4FFFD}\x{50000}-\x{5FFFD}\x{60000}-\x{6FFFD}\x{70000}-\x{7FFFD}\x{80000}-\x{8FFFD}\x{90000}-\x{9FFFD}\x{A0000}-\x{AFFFD}\x{B0000}-\x{BFFFD}\x{C0000}-\x{CFFFD}\x{D0000}-\x{DFFFD}\x{E1000}-\x{EFFFD}!$&\'()*+,;=@]|(%[0-9ABCDEF]{2}))+$/u', $string); 1927 } 1928 1929 public static function space_seperated_tokens($string) 1930 { 1931 $space_characters = "\x20\x09\x0A\x0B\x0C\x0D"; 1932 $string_length = strlen($string); 1933 1934 $position = strspn($string, $space_characters); 1935 $tokens = array(); 1936 1937 while ($position < $string_length) 1938 { 1939 $len = strcspn($string, $space_characters, $position); 1940 $tokens[] = substr($string, $position, $len); 1941 $position += $len; 1942 $position += strspn($string, $space_characters, $position); 1943 } 1944 1945 return $tokens; 1946 } 1947 1948 /** 1949 * Converts a unicode codepoint to a UTF-8 character 1950 * 1951 * @static 1952 * @param int $codepoint Unicode codepoint 1953 * @return string UTF-8 character 1954 */ 1955 public static function codepoint_to_utf8($codepoint) 1956 { 1957 $codepoint = (int) $codepoint; 1958 if ($codepoint < 0) 1959 { 1960 return false; 1961 } 1962 else if ($codepoint <= 0x7f) 1963 { 1964 return chr($codepoint); 1965 } 1966 else if ($codepoint <= 0x7ff) 1967 { 1968 return chr(0xc0 | ($codepoint >> 6)) . chr(0x80 | ($codepoint & 0x3f)); 1969 } 1970 else if ($codepoint <= 0xffff) 1971 { 1972 return chr(0xe0 | ($codepoint >> 12)) . chr(0x80 | (($codepoint >> 6) & 0x3f)) . chr(0x80 | ($codepoint & 0x3f)); 1973 } 1974 else if ($codepoint <= 0x10ffff) 1975 { 1976 return chr(0xf0 | ($codepoint >> 18)) . chr(0x80 | (($codepoint >> 12) & 0x3f)) . chr(0x80 | (($codepoint >> 6) & 0x3f)) . chr(0x80 | ($codepoint & 0x3f)); 1977 } 1978 else 1979 { 1980 // U+FFFD REPLACEMENT CHARACTER 1981 return "\xEF\xBF\xBD"; 1982 } 1983 } 1984 1985 /** 1986 * Similar to parse_str() 1987 * 1988 * Returns an associative array of name/value pairs, where the value is an 1989 * array of values that have used the same name 1990 * 1991 * @static 1992 * @param string $str The input string. 1993 * @return array 1994 */ 1995 public static function parse_str($str) 1996 { 1997 $return = array(); 1998 $str = explode('&', $str); 1999 2000 foreach ($str as $section) 2001 { 2002 if (strpos($section, '=') !== false) 2003 { 2004 list($name, $value) = explode('=', $section, 2); 2005 $return[urldecode($name)][] = urldecode($value); 2006 } 2007 else 2008 { 2009 $return[urldecode($section)][] = null; 2010 } 2011 } 2012 2013 return $return; 2014 } 2015 2016 /** 2017 * Detect XML encoding, as per XML 1.0 Appendix F.1 2018 * 2019 * @todo Add support for EBCDIC 2020 * @param string $data XML data 2021 * @param SimplePie_Registry $registry Class registry 2022 * @return array Possible encodings 2023 */ 2024 public static function xml_encoding($data, $registry) 2025 { 2026 // UTF-32 Big Endian BOM 2027 if (substr($data, 0, 4) === "\x00\x00\xFE\xFF") 2028 { 2029 $encoding[] = 'UTF-32BE'; 2030 } 2031 // UTF-32 Little Endian BOM 2032 elseif (substr($data, 0, 4) === "\xFF\xFE\x00\x00") 2033 { 2034 $encoding[] = 'UTF-32LE'; 2035 } 2036 // UTF-16 Big Endian BOM 2037 elseif (substr($data, 0, 2) === "\xFE\xFF") 2038 { 2039 $encoding[] = 'UTF-16BE'; 2040 } 2041 // UTF-16 Little Endian BOM 2042 elseif (substr($data, 0, 2) === "\xFF\xFE") 2043 { 2044 $encoding[] = 'UTF-16LE'; 2045 } 2046 // UTF-8 BOM 2047 elseif (substr($data, 0, 3) === "\xEF\xBB\xBF") 2048 { 2049 $encoding[] = 'UTF-8'; 2050 } 2051 // UTF-32 Big Endian Without BOM 2052 elseif (substr($data, 0, 20) === "\x00\x00\x00\x3C\x00\x00\x00\x3F\x00\x00\x00\x78\x00\x00\x00\x6D\x00\x00\x00\x6C") 2053 { 2054 if ($pos = strpos($data, "\x00\x00\x00\x3F\x00\x00\x00\x3E")) 2055 { 2056 $parser = $registry->create('XML_Declaration_Parser', array(SimplePie_Misc::change_encoding(substr($data, 20, $pos - 20), 'UTF-32BE', 'UTF-8'))); 2057 if ($parser->parse()) 2058 { 2059 $encoding[] = $parser->encoding; 2060 } 2061 } 2062 $encoding[] = 'UTF-32BE'; 2063 } 2064 // UTF-32 Little Endian Without BOM 2065 elseif (substr($data, 0, 20) === "\x3C\x00\x00\x00\x3F\x00\x00\x00\x78\x00\x00\x00\x6D\x00\x00\x00\x6C\x00\x00\x00") 2066 { 2067 if ($pos = strpos($data, "\x3F\x00\x00\x00\x3E\x00\x00\x00")) 2068 { 2069 $parser = $registry->create('XML_Declaration_Parser', array(SimplePie_Misc::change_encoding(substr($data, 20, $pos - 20), 'UTF-32LE', 'UTF-8'))); 2070 if ($parser->parse()) 2071 { 2072 $encoding[] = $parser->encoding; 2073 } 2074 } 2075 $encoding[] = 'UTF-32LE'; 2076 } 2077 // UTF-16 Big Endian Without BOM 2078 elseif (substr($data, 0, 10) === "\x00\x3C\x00\x3F\x00\x78\x00\x6D\x00\x6C") 2079 { 2080 if ($pos = strpos($data, "\x00\x3F\x00\x3E")) 2081 { 2082 $parser = $registry->create('XML_Declaration_Parser', array(SimplePie_Misc::change_encoding(substr($data, 20, $pos - 10), 'UTF-16BE', 'UTF-8'))); 2083 if ($parser->parse()) 2084 { 2085 $encoding[] = $parser->encoding; 2086 } 2087 } 2088 $encoding[] = 'UTF-16BE'; 2089 } 2090 // UTF-16 Little Endian Without BOM 2091 elseif (substr($data, 0, 10) === "\x3C\x00\x3F\x00\x78\x00\x6D\x00\x6C\x00") 2092 { 2093 if ($pos = strpos($data, "\x3F\x00\x3E\x00")) 2094 { 2095 $parser = $registry->create('XML_Declaration_Parser', array(SimplePie_Misc::change_encoding(substr($data, 20, $pos - 10), 'UTF-16LE', 'UTF-8'))); 2096 if ($parser->parse()) 2097 { 2098 $encoding[] = $parser->encoding; 2099 } 2100 } 2101 $encoding[] = 'UTF-16LE'; 2102 } 2103 // US-ASCII (or superset) 2104 elseif (substr($data, 0, 5) === "\x3C\x3F\x78\x6D\x6C") 2105 { 2106 if ($pos = strpos($data, "\x3F\x3E")) 2107 { 2108 $parser = $registry->create('XML_Declaration_Parser', array(substr($data, 5, $pos - 5))); 2109 if ($parser->parse()) 2110 { 2111 $encoding[] = $parser->encoding; 2112 } 2113 } 2114 $encoding[] = 'UTF-8'; 2115 } 2116 // Fallback to UTF-8 2117 else 2118 { 2119 $encoding[] = 'UTF-8'; 2120 } 2121 return $encoding; 2122 } 2123 2124 public static function output_javascript() 2125 { 2126 if (function_exists('ob_gzhandler')) 2127 { 2128 ob_start('ob_gzhandler'); 2129 } 2130 header('Content-type: text/javascript; charset: UTF-8'); 2131 header('Cache-Control: must-revalidate'); 2132 header('Expires: ' . gmdate('D, d M Y H:i:s', time() + 604800) . ' GMT'); // 7 days 2133 ?> 2134 function embed_quicktime(type, bgcolor, width, height, link, placeholder, loop) { 2135 if (placeholder != '') { 2136 document.writeln('<embed type="'+type+'" style="cursor:hand; cursor:pointer;" href="'+link+'" src="'+placeholder+'" width="'+width+'" height="'+height+'" autoplay="false" target="myself" controller="false" loop="'+loop+'" scale="aspect" bgcolor="'+bgcolor+'" pluginspage="http://www.apple.com/quicktime/download/"></embed>'); 2137 } 2138 else { 2139 document.writeln('<embed type="'+type+'" style="cursor:hand; cursor:pointer;" src="'+link+'" width="'+width+'" height="'+height+'" autoplay="false" target="myself" controller="true" loop="'+loop+'" scale="aspect" bgcolor="'+bgcolor+'" pluginspage="http://www.apple.com/quicktime/download/"></embed>'); 2140 } 2141 } 2142 2143 function embed_flash(bgcolor, width, height, link, loop, type) { 2144 document.writeln('<embed src="'+link+'" pluginspage="http://www.macromedia.com/go/getflashplayer" type="'+type+'" quality="high" width="'+width+'" height="'+height+'" bgcolor="'+bgcolor+'" loop="'+loop+'"></embed>'); 2145 } 2146 2147 function embed_flv(width, height, link, placeholder, loop, player) { 2148 document.writeln('<embed src="'+player+'" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" quality="high" width="'+width+'" height="'+height+'" wmode="transparent" flashvars="file='+link+'&autostart=false&repeat='+loop+'&showdigits=true&showfsbutton=false"></embed>'); 2149 } 2150 2151 function embed_wmedia(width, height, link) { 2152 document.writeln('<embed type="application/x-mplayer2" src="'+link+'" autosize="1" width="'+width+'" height="'+height+'" showcontrols="1" showstatusbar="0" showdisplay="0" autostart="0"></embed>'); 2153 } 2154 <?php 2155 } 2156 2157 /** 2158 * Get the SimplePie build timestamp 2159 * 2160 * Uses the git index if it exists, otherwise uses the modification time 2161 * of the newest file. 2162 */ 2163 public static function get_build() 2164 { 2165 $root = dirname(dirname(__FILE__)); 2166 if (file_exists($root . '/.git/index')) 2167 { 2168 return filemtime($root . '/.git/index'); 2169 } 2170 elseif (file_exists($root . '/SimplePie')) 2171 { 2172 $time = 0; 2173 foreach (glob($root . '/SimplePie/*.php') as $file) 2174 { 2175 if (($mtime = filemtime($file)) > $time) 2176 { 2177 $time = $mtime; 2178 } 2179 } 2180 return $time; 2181 } 2182 elseif (file_exists(dirname(__FILE__) . '/Core.php')) 2183 { 2184 return filemtime(dirname(__FILE__) . '/Core.php'); 2185 } 2186 else 2187 { 2188 return filemtime(__FILE__); 2189 } 2190 } 2191 2192 /** 2193 * Format debugging information 2194 */ 2195 public static function debug(&$sp) 2196 { 2197 $info = 'SimplePie ' . SIMPLEPIE_VERSION . ' Build ' . SIMPLEPIE_BUILD . "\n"; 2198 $info .= 'PHP ' . PHP_VERSION . "\n"; 2199 if ($sp->error() !== null) 2200 { 2201 $info .= 'Error occurred: ' . $sp->error() . "\n"; 2202 } 2203 else 2204 { 2205 $info .= "No error found.\n"; 2206 } 2207 $info .= "Extensions:\n"; 2208 $extensions = array('pcre', 'curl', 'zlib', 'mbstring', 'iconv', 'xmlreader', 'xml'); 2209 foreach ($extensions as $ext) 2210 { 2211 if (extension_loaded($ext)) 2212 { 2213 $info .= " $ext loaded\n"; 2214 switch ($ext) 2215 { 2216 case 'pcre': 2217 $info .= ' Version ' . PCRE_VERSION . "\n"; 2218 break; 2219 case 'curl': 2220 $version = curl_version(); 2221 $info .= ' Version ' . $version['version'] . "\n"; 2222 break; 2223 case 'mbstring': 2224 $info .= ' Overloading: ' . mb_get_info('func_overload') . "\n"; 2225 break; 2226 case 'iconv': 2227 $info .= ' Version ' . ICONV_VERSION . "\n"; 2228 break; 2229 case 'xml': 2230 $info .= ' Version ' . LIBXML_DOTTED_VERSION . "\n"; 2231 break; 2232 } 2233 } 2234 else 2235 { 2236 $info .= " $ext not loaded\n"; 2237 } 2238 } 2239 return $info; 2240 } 2241 2242 public static function silence_errors($num, $str) 2243 { 2244 // No-op 2245 } 2246 } 2247
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Thu Aug 11 10:00:09 2016 | Cross-referenced by PHPXref 0.7.1 |