|
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 |