Dave Huang <khym+skwirl@azeotrope.org> html format reporting
[squirrelmail.git] / functions / i18n.php
CommitLineData
59177427 1<?php
1fd97780 2
35586184 3/**
4 * i18n.php
5 *
15e6162e 6 * Copyright (c) 1999-2002 The SquirrelMail Project Team
35586184 7 * Licensed under the GNU GPL. For full terms see the file COPYING.
8 *
9 * This file contains variuos functions that are needed to do
10 * internationalization of SquirrelMail.
11 *
12 * Internally the output character set is used. Other characters are
13 * encoded using Unicode entities according to HTML 4.0.
14 *
15 * $Id$
16 */
17
a2a7852b 18/* Decodes a string to the internal encoding from the given charset */
19function charset_decode ($charset, $string) {
20 global $debug_mime;
21
22 /* All HTML special characters are 7 bit and can be replaced first */
23 $string = htmlspecialchars ($string);
24
25 $charset = strtolower($charset);
26
27 if ($debug_mime) $string = $charset . ':' . $string;
28
29 if (ereg('iso-8859-([[:digit:]]+)', $charset, $res)) {
30 if ($res[1] == '1') {
31 $ret = charset_decode_iso_8859_1 ($string);
32 } else if ($res[1] == '2') {
33 $ret = charset_decode_iso_8859_2 ($string);
34 } else if ($res[1] == '7') {
35 $ret = charset_decode_iso_8859_7 ($string);
36 } else if ($res[1] == '15') {
37 $ret = charset_decode_iso_8859_15 ($string);
38 } else {
39 $ret = charset_decode_iso_8859_default ($string);
40 }
41 } else if ($charset == 'ns_4551-1') {
42 $ret = charset_decode_ns_4551_1 ($string);
43 } else if ($charset == 'koi8-r') {
44 $ret = charset_decode_koi8r ($string);
45 } else if ($charset == 'windows-1251') {
46 $ret = charset_decode_koi8r ($string);
47 } else {
48 $ret = $string;
49 }
50 return( $ret );
51}
52
53/*
54 iso-8859-1 is the same as Latin 1 and is normally used
55 in western europe.
56 */
57function charset_decode_iso_8859_1 ($string) {
58 global $default_charset;
13e0c649 59
a2a7852b 60 if (strtolower($default_charset) <> 'iso-8859-1') {
61 /* Only do the slow convert if there are 8-bit characters */
62 if (ereg("[\200-\377]", $string)) {
066c374f 63 $string = str_replace("\201", '&#129;', $string);
64 $string = str_replace("\202", '&#130;', $string);
65 $string = str_replace("\203", '&#131;', $string);
66 $string = str_replace("\204", '&#132;', $string);
67 $string = str_replace("\205", '&#133;', $string);
68 $string = str_replace("\206", '&#134;', $string);
69 $string = str_replace("\207", '&#135;', $string);
70 $string = str_replace("\210", '&#136;', $string);
71 $string = str_replace("\211", '&#137;', $string);
72 $string = str_replace("\212", '&#138;', $string);
73 $string = str_replace("\213", '&#139;', $string);
74 $string = str_replace("\214", '&#140;', $string);
75 $string = str_replace("\215", '&#141;', $string);
76 $string = str_replace("\216", '&#142;', $string);
77 $string = str_replace("\217", '&#143;', $string);
78 $string = str_replace("\220", '&#144;', $string);
79 $string = str_replace("\221", '&#145;', $string);
80 $string = str_replace("\222", '&#146;', $string);
81 $string = str_replace("\223", '&#147;', $string);
82 $string = str_replace("\224", '&#148;', $string);
83 $string = str_replace("\225", '&#149;', $string);
84 $string = str_replace("\226", '&#150;', $string);
85 $string = str_replace("\227", '&#151;', $string);
86 $string = str_replace("\230", '&#152;', $string);
87 $string = str_replace("\231", '&#153;', $string);
88 $string = str_replace("\232", '&#154;', $string);
89 $string = str_replace("\233", '&#155;', $string);
90 $string = str_replace("\234", '&#156;', $string);
91 $string = str_replace("\235", '&#157;', $string);
92 $string = str_replace("\236", '&#158;', $string);
93 $string = str_replace("\237", '&#159;', $string);
94 $string = str_replace("\240", '&#160;', $string);
95 $string = str_replace("\241", '&#161;', $string);
96 $string = str_replace("\242", '&#162;', $string);
97 $string = str_replace("\243", '&#163;', $string);
98 $string = str_replace("\244", '&#164;', $string);
99 $string = str_replace("\245", '&#165;', $string);
100 $string = str_replace("\246", '&#166;', $string);
101 $string = str_replace("\247", '&#167;', $string);
102 $string = str_replace("\250", '&#168;', $string);
103 $string = str_replace("\251", '&#169;', $string);
104 $string = str_replace("\252", '&#170;', $string);
105 $string = str_replace("\253", '&#171;', $string);
106 $string = str_replace("\254", '&#172;', $string);
107 $string = str_replace("\255", '&#173;', $string);
108 $string = str_replace("\256", '&#174;', $string);
109 $string = str_replace("\257", '&#175;', $string);
110 $string = str_replace("\260", '&#176;', $string);
111 $string = str_replace("\261", '&#177;', $string);
112 $string = str_replace("\262", '&#178;', $string);
113 $string = str_replace("\263", '&#179;', $string);
114 $string = str_replace("\264", '&#180;', $string);
115 $string = str_replace("\265", '&#181;', $string);
116 $string = str_replace("\266", '&#182;', $string);
117 $string = str_replace("\267", '&#183;', $string);
118 $string = str_replace("\270", '&#184;', $string);
119 $string = str_replace("\271", '&#185;', $string);
120 $string = str_replace("\272", '&#186;', $string);
121 $string = str_replace("\273", '&#187;', $string);
122 $string = str_replace("\274", '&#188;', $string);
123 $string = str_replace("\275", '&#189;', $string);
124 $string = str_replace("\276", '&#190;', $string);
125 $string = str_replace("\277", '&#191;', $string);
126 $string = str_replace("\300", '&#192;', $string);
127 $string = str_replace("\301", '&#193;', $string);
128 $string = str_replace("\302", '&#194;', $string);
129 $string = str_replace("\303", '&#195;', $string);
130 $string = str_replace("\304", '&#196;', $string);
131 $string = str_replace("\305", '&#197;', $string);
132 $string = str_replace("\306", '&#198;', $string);
133 $string = str_replace("\307", '&#199;', $string);
134 $string = str_replace("\310", '&#200;', $string);
135 $string = str_replace("\311", '&#201;', $string);
136 $string = str_replace("\312", '&#202;', $string);
137 $string = str_replace("\313", '&#203;', $string);
138 $string = str_replace("\314", '&#204;', $string);
139 $string = str_replace("\315", '&#205;', $string);
140 $string = str_replace("\316", '&#206;', $string);
141 $string = str_replace("\317", '&#207;', $string);
142 $string = str_replace("\320", '&#208;', $string);
143 $string = str_replace("\321", '&#209;', $string);
144 $string = str_replace("\322", '&#210;', $string);
145 $string = str_replace("\323", '&#211;', $string);
146 $string = str_replace("\324", '&#212;', $string);
147 $string = str_replace("\325", '&#213;', $string);
148 $string = str_replace("\326", '&#214;', $string);
149 $string = str_replace("\327", '&#215;', $string);
150 $string = str_replace("\330", '&#216;', $string);
151 $string = str_replace("\331", '&#217;', $string);
152 $string = str_replace("\332", '&#218;', $string);
153 $string = str_replace("\333", '&#219;', $string);
154 $string = str_replace("\334", '&#220;', $string);
155 $string = str_replace("\335", '&#221;', $string);
156 $string = str_replace("\336", '&#222;', $string);
157 $string = str_replace("\337", '&#223;', $string);
158 $string = str_replace("\340", '&#224;', $string);
159 $string = str_replace("\341", '&#225;', $string);
160 $string = str_replace("\342", '&#226;', $string);
161 $string = str_replace("\343", '&#227;', $string);
162 $string = str_replace("\344", '&#228;', $string);
163 $string = str_replace("\345", '&#229;', $string);
164 $string = str_replace("\346", '&#230;', $string);
165 $string = str_replace("\347", '&#231;', $string);
166 $string = str_replace("\350", '&#232;', $string);
167 $string = str_replace("\351", '&#233;', $string);
168 $string = str_replace("\352", '&#234;', $string);
169 $string = str_replace("\353", '&#235;', $string);
170 $string = str_replace("\354", '&#236;', $string);
171 $string = str_replace("\355", '&#237;', $string);
172 $string = str_replace("\356", '&#238;', $string);
173 $string = str_replace("\357", '&#239;', $string);
174 $string = str_replace("\360", '&#240;', $string);
175 $string = str_replace("\361", '&#241;', $string);
176 $string = str_replace("\362", '&#242;', $string);
177 $string = str_replace("\363", '&#243;', $string);
178 $string = str_replace("\364", '&#244;', $string);
179 $string = str_replace("\365", '&#245;', $string);
180 $string = str_replace("\366", '&#246;', $string);
181 $string = str_replace("\367", '&#247;', $string);
182 $string = str_replace("\370", '&#248;', $string);
183 $string = str_replace("\371", '&#249;', $string);
184 $string = str_replace("\372", '&#250;', $string);
185 $string = str_replace("\373", '&#251;', $string);
186 $string = str_replace("\374", '&#252;', $string);
187 $string = str_replace("\375", '&#253;', $string);
188 $string = str_replace("\376", '&#254;', $string);
189 $string = str_replace("\377", '&#255;', $string);
a2a7852b 190 }
191 }
192
193 return ($string);
194}
195
196/* iso-8859-2 is used for some eastern European languages */
197function charset_decode_iso_8859_2 ($string) {
198 global $default_charset;
199
200 if (strtolower($default_charset) == 'iso-8859-2')
201 return $string;
202
203 /* Only do the slow convert if there are 8-bit characters */
204 if (! ereg("[\200-\377]", $string))
205 return $string;
206
207 /* NO-BREAK SPACE */
208 $string = str_replace("\240", '&#160;', $string);
209 /* LATIN CAPITAL LETTER A WITH OGONEK */
210 $string = str_replace("\241", '&#260;', $string);
211 /* BREVE */
212 $string = str_replace("\242", '&#728;', $string);
213 // LATIN CAPITAL LETTER L WITH STROKE
214 $string = str_replace("\243", '&#321;', $string);
215 // CURRENCY SIGN
216 $string = str_replace("\244", '&#164;', $string);
217 // LATIN CAPITAL LETTER L WITH CARON
218 $string = str_replace("\245", '&#317;', $string);
219 // LATIN CAPITAL LETTER S WITH ACUTE
220 $string = str_replace("\246", '&#346;', $string);
221 // SECTION SIGN
222 $string = str_replace("\247", '&#167;', $string);
223 // DIAERESIS
224 $string = str_replace("\250", '&#168;', $string);
225 // LATIN CAPITAL LETTER S WITH CARON
226 $string = str_replace("\251", '&#352;', $string);
227 // LATIN CAPITAL LETTER S WITH CEDILLA
228 $string = str_replace("\252", '&#350;', $string);
229 // LATIN CAPITAL LETTER T WITH CARON
230 $string = str_replace("\253", '&#356;', $string);
231 // LATIN CAPITAL LETTER Z WITH ACUTE
232 $string = str_replace("\254", '&#377;', $string);
233 // SOFT HYPHEN
234 $string = str_replace("\255", '&#173;', $string);
235 // LATIN CAPITAL LETTER Z WITH CARON
236 $string = str_replace("\256", '&#381;', $string);
237 // LATIN CAPITAL LETTER Z WITH DOT ABOVE
238 $string = str_replace("\257", '&#379;', $string);
239 // DEGREE SIGN
240 $string = str_replace("\260", '&#176;', $string);
241 // LATIN SMALL LETTER A WITH OGONEK
242 $string = str_replace("\261", '&#261;', $string);
243 // OGONEK
244 $string = str_replace("\262", '&#731;', $string);
245 // LATIN SMALL LETTER L WITH STROKE
246 $string = str_replace("\263", '&#322;', $string);
247 // ACUTE ACCENT
248 $string = str_replace("\264", '&#180;', $string);
249 // LATIN SMALL LETTER L WITH CARON
250 $string = str_replace("\265", '&#318;', $string);
251 // LATIN SMALL LETTER S WITH ACUTE
252 $string = str_replace("\266", '&#347;', $string);
253 // CARON
254 $string = str_replace("\267", '&#711;', $string);
255 // CEDILLA
256 $string = str_replace("\270", '&#184;', $string);
257 // LATIN SMALL LETTER S WITH CARON
258 $string = str_replace("\271", '&#353;', $string);
259 // LATIN SMALL LETTER S WITH CEDILLA
260 $string = str_replace("\272", '&#351;', $string);
261 // LATIN SMALL LETTER T WITH CARON
262 $string = str_replace("\273", '&#357;', $string);
263 // LATIN SMALL LETTER Z WITH ACUTE
264 $string = str_replace("\274", '&#378;', $string);
265 // DOUBLE ACUTE ACCENT
266 $string = str_replace("\275", '&#733;', $string);
267 // LATIN SMALL LETTER Z WITH CARON
268 $string = str_replace("\276", '&#382;', $string);
269 // LATIN SMALL LETTER Z WITH DOT ABOVE
270 $string = str_replace("\277", '&#380;', $string);
271 // LATIN CAPITAL LETTER R WITH ACUTE
272 $string = str_replace("\300", '&#340;', $string);
273 // LATIN CAPITAL LETTER A WITH ACUTE
274 $string = str_replace("\301", '&#193;', $string);
275 // LATIN CAPITAL LETTER A WITH CIRCUMFLEX
276 $string = str_replace("\302", '&#194;', $string);
277 // LATIN CAPITAL LETTER A WITH BREVE
278 $string = str_replace("\303", '&#258;', $string);
279 // LATIN CAPITAL LETTER A WITH DIAERESIS
280 $string = str_replace("\304", '&#196;', $string);
281 // LATIN CAPITAL LETTER L WITH ACUTE
282 $string = str_replace("\305", '&#313;', $string);
283 // LATIN CAPITAL LETTER C WITH ACUTE
284 $string = str_replace("\306", '&#262;', $string);
285 // LATIN CAPITAL LETTER C WITH CEDILLA
286 $string = str_replace("\307", '&#199;', $string);
287 // LATIN CAPITAL LETTER C WITH CARON
288 $string = str_replace("\310", '&#268;', $string);
289 // LATIN CAPITAL LETTER E WITH ACUTE
290 $string = str_replace("\311", '&#201;', $string);
291 // LATIN CAPITAL LETTER E WITH OGONEK
292 $string = str_replace("\312", '&#280;', $string);
293 // LATIN CAPITAL LETTER E WITH DIAERESIS
294 $string = str_replace("\313", '&#203;', $string);
295 // LATIN CAPITAL LETTER E WITH CARON
296 $string = str_replace("\314", '&#282;', $string);
297 // LATIN CAPITAL LETTER I WITH ACUTE
298 $string = str_replace("\315", '&#205;', $string);
299 // LATIN CAPITAL LETTER I WITH CIRCUMFLEX
300 $string = str_replace("\316", '&#206;', $string);
301 // LATIN CAPITAL LETTER D WITH CARON
302 $string = str_replace("\317", '&#270;', $string);
303 // LATIN CAPITAL LETTER D WITH STROKE
304 $string = str_replace("\320", '&#272;', $string);
305 // LATIN CAPITAL LETTER N WITH ACUTE
306 $string = str_replace("\321", '&#323;', $string);
307 // LATIN CAPITAL LETTER N WITH CARON
308 $string = str_replace("\322", '&#327;', $string);
309 // LATIN CAPITAL LETTER O WITH ACUTE
310 $string = str_replace("\323", '&#211;', $string);
311 // LATIN CAPITAL LETTER O WITH CIRCUMFLEX
312 $string = str_replace("\324", '&#212;', $string);
313 // LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
314 $string = str_replace("\325", '&#336;', $string);
315 // LATIN CAPITAL LETTER O WITH DIAERESIS
316 $string = str_replace("\326", '&#214;', $string);
317 // MULTIPLICATION SIGN
318 $string = str_replace("\327", '&#215;', $string);
319 // LATIN CAPITAL LETTER R WITH CARON
320 $string = str_replace("\330", '&#344;', $string);
321 // LATIN CAPITAL LETTER U WITH RING ABOVE
322 $string = str_replace("\331", '&#366;', $string);
323 // LATIN CAPITAL LETTER U WITH ACUTE
324 $string = str_replace("\332", '&#218;', $string);
325 // LATIN CAPITAL LETTER U WITH DOUBLE ACUTE
326 $string = str_replace("\333", '&#368;', $string);
327 // LATIN CAPITAL LETTER U WITH DIAERESIS
328 $string = str_replace("\334", '&#220;', $string);
329 // LATIN CAPITAL LETTER Y WITH ACUTE
330 $string = str_replace("\335", '&#221;', $string);
331 // LATIN CAPITAL LETTER T WITH CEDILLA
332 $string = str_replace("\336", '&#354;', $string);
333 // LATIN SMALL LETTER SHARP S
334 $string = str_replace("\337", '&#223;', $string);
335 // LATIN SMALL LETTER R WITH ACUTE
336 $string = str_replace("\340", '&#341;', $string);
337 // LATIN SMALL LETTER A WITH ACUTE
338 $string = str_replace("\341", '&#225;', $string);
339 // LATIN SMALL LETTER A WITH CIRCUMFLEX
340 $string = str_replace("\342", '&#226;', $string);
341 // LATIN SMALL LETTER A WITH BREVE
342 $string = str_replace("\343", '&#259;', $string);
343 // LATIN SMALL LETTER A WITH DIAERESIS
344 $string = str_replace("\344", '&#228;', $string);
345 // LATIN SMALL LETTER L WITH ACUTE
346 $string = str_replace("\345", '&#314;', $string);
347 // LATIN SMALL LETTER C WITH ACUTE
348 $string = str_replace("\346", '&#263;', $string);
349 // LATIN SMALL LETTER C WITH CEDILLA
350 $string = str_replace("\347", '&#231;', $string);
351 // LATIN SMALL LETTER C WITH CARON
352 $string = str_replace("\350", '&#269;', $string);
353 // LATIN SMALL LETTER E WITH ACUTE
354 $string = str_replace("\351", '&#233;', $string);
355 // LATIN SMALL LETTER E WITH OGONEK
356 $string = str_replace("\352", '&#281;', $string);
357 // LATIN SMALL LETTER E WITH DIAERESIS
358 $string = str_replace("\353", '&#235;', $string);
359 // LATIN SMALL LETTER E WITH CARON
360 $string = str_replace("\354", '&#283;', $string);
361 // LATIN SMALL LETTER I WITH ACUTE
362 $string = str_replace("\355", '&#237;', $string);
363 // LATIN SMALL LETTER I WITH CIRCUMFLEX
364 $string = str_replace("\356", '&#238;', $string);
365 // LATIN SMALL LETTER D WITH CARON
366 $string = str_replace("\357", '&#271;', $string);
367 // LATIN SMALL LETTER D WITH STROKE
368 $string = str_replace("\360", '&#273;', $string);
369 // LATIN SMALL LETTER N WITH ACUTE
370 $string = str_replace("\361", '&#324;', $string);
371 // LATIN SMALL LETTER N WITH CARON
372 $string = str_replace("\362", '&#328;', $string);
373 // LATIN SMALL LETTER O WITH ACUTE
374 $string = str_replace("\363", '&#243;', $string);
375 // LATIN SMALL LETTER O WITH CIRCUMFLEX
376 $string = str_replace("\364", '&#244;', $string);
377 // LATIN SMALL LETTER O WITH DOUBLE ACUTE
378 $string = str_replace("\365", '&#337;', $string);
379 // LATIN SMALL LETTER O WITH DIAERESIS
380 $string = str_replace("\366", '&#246;', $string);
381 // DIVISION SIGN
382 $string = str_replace("\367", '&#247;', $string);
383 // LATIN SMALL LETTER R WITH CARON
384 $string = str_replace("\370", '&#345;', $string);
385 // LATIN SMALL LETTER U WITH RING ABOVE
386 $string = str_replace("\371", '&#367;', $string);
387 // LATIN SMALL LETTER U WITH ACUTE
388 $string = str_replace("\372", '&#250;', $string);
389 // LATIN SMALL LETTER U WITH DOUBLE ACUTE
390 $string = str_replace("\373", '&#369;', $string);
391 // LATIN SMALL LETTER U WITH DIAERESIS
392 $string = str_replace("\374", '&#252;', $string);
393 // LATIN SMALL LETTER Y WITH ACUTE
394 $string = str_replace("\375", '&#253;', $string);
395 // LATIN SMALL LETTER T WITH CEDILLA
396 $string = str_replace("\376", '&#355;', $string);
397 // DOT ABOVE
398 $string = str_replace("\377", '&#729;', $string);
399
400 return $string;
401}
402
403/* iso-8859-7 is Greek. */
404function charset_decode_iso_8859_7 ($string) {
405 global $default_charset;
406
407 if (strtolower($default_charset) == 'iso-8859-7') {
408 return $string;
409 }
410
411 /* Only do the slow convert if there are 8-bit characters */
412 if (!ereg("[\200-\377]", $string)) {
413 return $string;
414 }
415
416 /* Some diverse characters in the beginning */
417 $string = str_replace("\240", '&#160;', $string);
418 $string = str_replace("\241", '&#8216;', $string);
419 $string = str_replace("\242", '&#8217;', $string);
420 $string = str_replace("\243", '&#163;', $string);
421 $string = str_replace("\246", '&#166;', $string);
422 $string = str_replace("\247", '&#167;', $string);
423 $string = str_replace("\250", '&#168;', $string);
424 $string = str_replace("\251", '&#169;', $string);
425 $string = str_replace("\253", '&#171;', $string);
426 $string = str_replace("\254", '&#172;', $string);
427 $string = str_replace("\255", '&#173;', $string);
428 $string = str_replace("\257", '&#8213;', $string);
429 $string = str_replace("\260", '&#176;', $string);
430 $string = str_replace("\261", '&#177;', $string);
431 $string = str_replace("\262", '&#178;', $string);
432 $string = str_replace("\263", '&#179;', $string);
433
434 /* Horizontal bar (parentheki pavla) */
435 $string = str_replace ("\257", '&#8213;', $string);
436
437 /*
438 * ISO-8859-7 characters from 11/04 (0xB4) to 11/06 (0xB6)
439 * These are Unicode 900-902
440 */
441 while (ereg("([\264-\266])", $string, $res)) {
442 $replace = '&#' . (ord($res[1])+720) . ';';
443 $string = str_replace($res[1], $replace, $string);
444 }
445
446 /* 11/07 (0xB7) Middle dot is the same in iso-8859-1 */
447 $string = str_replace("\267", '&#183;', $string);
448
449 /*
450 * ISO-8859-7 characters from 11/08 (0xB8) to 11/10 (0xBA)
451 * These are Unicode 900-902
452 */
453 while (ereg("([\270-\272])", $string, $res)) {
454 $replace = '&#' . (ord($res[1])+720) . ";";
455 $string = str_replace($res[1], $replace, $string);
456 }
457
458 /*
459 * 11/11 (0xBB) Right angle quotation mark is the same as in
460 * iso-8859-1
461 */
462 $string = str_replace("\273", '&#187;', $string);
463
464 /* And now the rest of the charset */
465 while (ereg("([\274-\376])", $string, $res)) {
466 $replace = '&#' . (ord($res[1])+720) . ';';
467 $string = str_replace($res[1], $replace, $string);
468 }
469
470 return $string;
471}
472
473/*
474 * iso-8859-15 is Latin 9 and has very much the same use as Latin 1
475 * but has the Euro symbol and some characters needed for French.
476 */
477function charset_decode_iso_8859_15 ($string) {
478 // Euro sign
479 $string = str_replace ("\244", '&#8364;', $string);
480 // Latin capital letter S with caron
481 $string = str_replace ("\244", '&#352;', $string);
482 // Latin small letter s with caron
483 $string = str_replace ("\250", '&#353;', $string);
484 // Latin capital letter Z with caron
485 $string = str_replace ("\264", '&#381;', $string);
486 // Latin small letter z with caron
487 $string = str_replace ("\270", '&#382;', $string);
488 // Latin capital ligature OE
489 $string = str_replace ("\274", '&#338;', $string);
490 // Latin small ligature oe
491 $string = str_replace ("\275", '&#339;', $string);
492 // Latin capital letter Y with diaeresis
493 $string = str_replace ("\276", '&#376;', $string);
494
495 return (charset_decode_iso_8859_1($string));
496}
497
498/* ISO-8859-15 is Cyrillic */
499function charset_decode_iso_8859_5 ($string) {
500 // Convert to KOI8-R, then return this decoded.
501 $string = convert_cyr_string($string, 'i', 'k');
502 return charset_decode_koi8r($string);
503}
504
505/* Remove all 8 bit characters from all other ISO-8859 character sets */
506function charset_decode_iso_8859_default ($string) {
507 return (strtr($string, "\240\241\242\243\244\245\246\247".
1fd97780 508 "\250\251\252\253\254\255\256\257".
509 "\260\261\262\263\264\265\266\267".
510 "\270\271\272\273\274\275\276\277".
511 "\300\301\302\303\304\305\306\307".
512 "\310\311\312\313\314\315\316\317".
513 "\320\321\322\323\324\325\326\327".
514 "\330\331\332\333\334\335\336\337".
515 "\340\341\342\343\344\345\346\347".
516 "\350\351\352\353\354\355\356\357".
517 "\360\361\362\363\364\365\366\367".
a2a7852b 518 "\370\371\372\373\374\375\376\377",
1fd97780 519 "????????????????????????????????????????".
520 "????????????????????????????????????????".
521 "????????????????????????????????????????".
522 "????????"));
a2a7852b 523
524}
525
526/*
527 * This is the same as ISO-646-NO and is used by some
528 * Microsoft programs when sending Norwegian characters
529 */
530function charset_decode_ns_4551_1 ($string) {
531 /*
532 * These characters are:
533 * Latin capital letter AE
534 * Latin capital letter O with stroke
535 * Latin capital letter A with ring above
536 * and the same as small letters
537 */
538