library/SimplePie/Misc.php Quellcode

Misc.php
gehe zur Dokumentation dieser Datei
1 <?php
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 
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 
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 
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  {
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 
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 
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 
1757  public static function entities_decode($data)
1758  {
1759  $decoder = new SimplePie_Decode_HTML_Entities($data);
1760  return $decoder->parse();
1761  }
1762 
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  {
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':
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':
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  {
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 
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 
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 
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 
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 
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 




Korrekturen, Hinweise und Ergänzungen

Bitte scheuen Sie sich nicht und melden Sie, was auf dieser Seite sachlich falsch oder irreführend ist, was ergänzt werden sollte, was fehlt usw. Dazu bitte oben aus dem Menü Seite den Eintrag Support Forum wählen. Es ist eine kostenlose Anmeldung erforderlich, um Anmerkungen zu posten. Unpassende Postings, Spam usw. werden kommentarlos entfernt.