Welsh is cy_GB and not uk_UA.
[squirrelmail.git] / functions / i18n.php
CommitLineData
59177427 1<?php
1fd97780 2
35586184 3/**
4 * i18n.php
5 *
76911253 6 * Copyright (c) 1999-2003 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
961ca3d8 18require_once(SM_PATH . 'functions/global.php');
19
a2a7852b 20/* Decodes a string to the internal encoding from the given charset */
21function charset_decode ($charset, $string) {
6fbd125b 22 global $languages, $squirrelmail_language;
a2a7852b 23
3714db45 24 if (isset($languages[$squirrelmail_language]['XTRA_CODE']) &&
25 function_exists($languages[$squirrelmail_language]['XTRA_CODE'])) {
6fbd125b 26 $string = $languages[$squirrelmail_language]['XTRA_CODE']('decode', $string);
27 }
b05c8961 28
a2a7852b 29 /* All HTML special characters are 7 bit and can be replaced first */
cef054e4 30
098ea084 31 $string = htmlspecialchars ($string);
a2a7852b 32
33 $charset = strtolower($charset);
34
94965562 35 set_my_charset() ;
36
a2a7852b 37 if (ereg('iso-8859-([[:digit:]]+)', $charset, $res)) {
38 if ($res[1] == '1') {
39 $ret = charset_decode_iso_8859_1 ($string);
40 } else if ($res[1] == '2') {
41 $ret = charset_decode_iso_8859_2 ($string);
9be313d5 42 } else if ($res[1] == '4') {
43 $ret = charset_decode_iso_8859_4 ($string);
94965562 44 } else if ($res[1] == '5') {
45 $ret = charset_decode_iso_8859_5 ($string);
a2a7852b 46 } else if ($res[1] == '7') {
47 $ret = charset_decode_iso_8859_7 ($string);
3ab35042 48 } else if ($res[1] == '9') {
49 $ret = charset_decode_iso_8859_9 ($string);
9be313d5 50 } else if ($res[1] == '13') {
51 $ret = charset_decode_iso_8859_13 ($string);
a2a7852b 52 } else if ($res[1] == '15') {
53 $ret = charset_decode_iso_8859_15 ($string);
54 } else {
55 $ret = charset_decode_iso_8859_default ($string);
56 }
57 } else if ($charset == 'ns_4551-1') {
58 $ret = charset_decode_ns_4551_1 ($string);
59 } else if ($charset == 'koi8-r') {
60 $ret = charset_decode_koi8r ($string);
61 } else if ($charset == 'windows-1251') {
ecd877a8 62 $ret = charset_decode_windows_1251 ($string);
3ab35042 63 } else if ($charset == 'windows-1253') {
64 $ret = charset_decode_windows_1253 ($string);
65 } else if ($charset == 'windows-1254') {
66 $ret = charset_decode_windows_1254 ($string);
c37a12f8 67 } else if ($charset == 'windows-1257') {
68 $ret = charset_decode_windows_1257 ($string);
3ab35042 69 } else if ($charset == 'utf-8') {
70 $ret = charset_decode_utf8 ($string);
a2a7852b 71 } else {
72 $ret = $string;
73 }
74 return( $ret );
75}
76
77/*
78 iso-8859-1 is the same as Latin 1 and is normally used
79 in western europe.
80 */
81function charset_decode_iso_8859_1 ($string) {
82 global $default_charset;
13e0c649 83
a2a7852b 84 if (strtolower($default_charset) <> 'iso-8859-1') {
85 /* Only do the slow convert if there are 8-bit characters */
86 if (ereg("[\200-\377]", $string)) {
066c374f 87 $string = str_replace("\201", '&#129;', $string);
88 $string = str_replace("\202", '&#130;', $string);
89 $string = str_replace("\203", '&#131;', $string);
90 $string = str_replace("\204", '&#132;', $string);
91 $string = str_replace("\205", '&#133;', $string);
92 $string = str_replace("\206", '&#134;', $string);
93 $string = str_replace("\207", '&#135;', $string);
94 $string = str_replace("\210", '&#136;', $string);
95 $string = str_replace("\211", '&#137;', $string);
96 $string = str_replace("\212", '&#138;', $string);
97 $string = str_replace("\213", '&#139;', $string);
98 $string = str_replace("\214", '&#140;', $string);
99 $string = str_replace("\215", '&#141;', $string);
100 $string = str_replace("\216", '&#142;', $string);
101 $string = str_replace("\217", '&#143;', $string);
102 $string = str_replace("\220", '&#144;', $string);
103 $string = str_replace("\221", '&#145;', $string);
104 $string = str_replace("\222", '&#146;', $string);
105 $string = str_replace("\223", '&#147;', $string);
106 $string = str_replace("\224", '&#148;', $string);
107 $string = str_replace("\225", '&#149;', $string);
108 $string = str_replace("\226", '&#150;', $string);
109 $string = str_replace("\227", '&#151;', $string);
110 $string = str_replace("\230", '&#152;', $string);
111 $string = str_replace("\231", '&#153;', $string);
112 $string = str_replace("\232", '&#154;', $string);
113 $string = str_replace("\233", '&#155;', $string);
114 $string = str_replace("\234", '&#156;', $string);
115 $string = str_replace("\235", '&#157;', $string);
116 $string = str_replace("\236", '&#158;', $string);
117 $string = str_replace("\237", '&#159;', $string);
118 $string = str_replace("\240", '&#160;', $string);
119 $string = str_replace("\241", '&#161;', $string);
120 $string = str_replace("\242", '&#162;', $string);
121 $string = str_replace("\243", '&#163;', $string);
122 $string = str_replace("\244", '&#164;', $string);
123 $string = str_replace("\245", '&#165;', $string);
124 $string = str_replace("\246", '&#166;', $string);
125 $string = str_replace("\247", '&#167;', $string);
126 $string = str_replace("\250", '&#168;', $string);
127 $string = str_replace("\251", '&#169;', $string);
128 $string = str_replace("\252", '&#170;', $string);
129 $string = str_replace("\253", '&#171;', $string);
130 $string = str_replace("\254", '&#172;', $string);
131 $string = str_replace("\255", '&#173;', $string);
132 $string = str_replace("\256", '&#174;', $string);
133 $string = str_replace("\257", '&#175;', $string);
134 $string = str_replace("\260", '&#176;', $string);
135 $string = str_replace("\261", '&#177;', $string);
136 $string = str_replace("\262", '&#178;', $string);
137 $string = str_replace("\263", '&#179;', $string);
138 $string = str_replace("\264", '&#180;', $string);
139 $string = str_replace("\265", '&#181;', $string);
140 $string = str_replace("\266", '&#182;', $string);
141 $string = str_replace("\267", '&#183;', $string);
142 $string = str_replace("\270", '&#184;', $string);
143 $string = str_replace("\271", '&#185;', $string);
144 $string = str_replace("\272", '&#186;', $string);
145 $string = str_replace("\273", '&#187;', $string);
146 $string = str_replace("\274", '&#188;', $string);
147 $string = str_replace("\275", '&#189;', $string);
148 $string = str_replace("\276", '&#190;', $string);
149 $string = str_replace("\277", '&#191;', $string);
150 $string = str_replace("\300", '&#192;', $string);
151 $string = str_replace("\301", '&#193;', $string);
152 $string = str_replace("\302", '&#194;', $string);
153 $string = str_replace("\303", '&#195;', $string);
154 $string = str_replace("\304", '&#196;', $string);
155 $string = str_replace("\305", '&#197;', $string);
156 $string = str_replace("\306", '&#198;', $string);
157 $string = str_replace("\307", '&#199;', $string);
158 $string = str_replace("\310", '&#200;', $string);
159 $string = str_replace("\311", '&#201;', $string);
160 $string = str_replace("\312", '&#202;', $string);
161 $string = str_replace("\313", '&#203;', $string);
162 $string = str_replace("\314", '&#204;', $string);
163 $string = str_replace("\315", '&#205;', $string);
164 $string = str_replace("\316", '&#206;', $string);
165 $string = str_replace("\317", '&#207;', $string);
166 $string = str_replace("\320", '&#208;', $string);
167 $string = str_replace("\321", '&#209;', $string);
168 $string = str_replace("\322", '&#210;', $string);
169 $string = str_replace("\323", '&#211;', $string);
170 $string = str_replace("\324", '&#212;', $string);
171 $string = str_replace("\325", '&#213;', $string);
172 $string = str_replace("\326", '&#214;', $string);
173 $string = str_replace("\327", '&#215;', $string);
174 $string = str_replace("\330", '&#216;', $string);
175 $string = str_replace("\331", '&#217;', $string);
176 $string = str_replace("\332", '&#218;', $string);
177 $string = str_replace("\333", '&#219;', $string);
178 $string = str_replace("\334", '&#220;', $string);
179 $string = str_replace("\335", '&#221;', $string);
180 $string = str_replace("\336", '&#222;', $string);
181 $string = str_replace("\337", '&#223;', $string);
182 $string = str_replace("\340", '&#224;', $string);
183 $string = str_replace("\341", '&#225;', $string);
184 $string = str_replace("\342", '&#226;', $string);
185 $string = str_replace("\343", '&#227;', $string);
186 $string = str_replace("\344", '&#228;', $string);
187 $string = str_replace("\345", '&#229;', $string);
188 $string = str_replace("\346", '&#230;', $string);
189 $string = str_replace("\347", '&#231;', $string);
190 $string = str_replace("\350", '&#232;', $string);
191 $string = str_replace("\351", '&#233;', $string);
192 $string = str_replace("\352", '&#234;', $string);
193 $string = str_replace("\353", '&#235;', $string);
194 $string = str_replace("\354", '&#236;', $string);
195 $string = str_replace("\355", '&#237;', $string);
196 $string = str_replace("\356", '&#238;', $string);
197 $string = str_replace("\357", '&#239;', $string);
198 $string = str_replace("\360", '&#240;', $string);
199 $string = str_replace("\361", '&#241;', $string);
200 $string = str_replace("\362", '&#242;', $string);
201 $string = str_replace("\363", '&#243;', $string);
202 $string = str_replace("\364", '&#244;', $string);
203 $string = str_replace("\365", '&#245;', $string);
204 $string = str_replace("\366", '&#246;', $string);
205 $string = str_replace("\367", '&#247;', $string);
206 $string = str_replace("\370", '&#248;', $string);
207 $string = str_replace("\371", '&#249;', $string);
208 $string = str_replace("\372", '&#250;', $string);
209 $string = str_replace("\373", '&#251;', $string);
210 $string = str_replace("\374", '&#252;', $string);
211 $string = str_replace("\375", '&#253;', $string);
212 $string = str_replace("\376", '&#254;', $string);
213 $string = str_replace("\377", '&#255;', $string);
a2a7852b 214 }
215 }
216
217 return ($string);
218}
219
220/* iso-8859-2 is used for some eastern European languages */
221function charset_decode_iso_8859_2 ($string) {
222 global $default_charset;
223
224 if (strtolower($default_charset) == 'iso-8859-2')
225 return $string;
226
227 /* Only do the slow convert if there are 8-bit characters */
228 if (! ereg("[\200-\377]", $string))
229 return $string;
230
231 /* NO-BREAK SPACE */
232 $string = str_replace("\240", '&#160;', $string);
233 /* LATIN CAPITAL LETTER A WITH OGONEK */
234 $string = str_replace("\241", '&#260;', $string);
235 /* BREVE */
236 $string = str_replace("\242", '&#728;', $string);
237 // LATIN CAPITAL LETTER L WITH STROKE
238 $string = str_replace("\243", '&#321;', $string);
239 // CURRENCY SIGN
240 $string = str_replace("\244", '&#164;', $string);
241 // LATIN CAPITAL LETTER L WITH CARON
242 $string = str_replace("\245", '&#317;', $string);
243 // LATIN CAPITAL LETTER S WITH ACUTE
244 $string = str_replace("\246", '&#346;', $string);
245 // SECTION SIGN
246 $string = str_replace("\247", '&#167;', $string);
247 // DIAERESIS
248 $string = str_replace("\250", '&#168;', $string);
249 // LATIN CAPITAL LETTER S WITH CARON
250 $string = str_replace("\251", '&#352;', $string);
251 // LATIN CAPITAL LETTER S WITH CEDILLA
252 $string = str_replace("\252", '&#350;', $string);
253 // LATIN CAPITAL LETTER T WITH CARON
254 $string = str_replace("\253", '&#356;', $string);
255 // LATIN CAPITAL LETTER Z WITH ACUTE
256 $string = str_replace("\254", '&#377;', $string);
257 // SOFT HYPHEN
258 $string = str_replace("\255", '&#173;', $string);
259 // LATIN CAPITAL LETTER Z WITH CARON
260 $string = str_replace("\256", '&#381;', $string);
261 // LATIN CAPITAL LETTER Z WITH DOT ABOVE
262 $string = str_replace("\257", '&#379;', $string);
263 // DEGREE SIGN
264 $string = str_replace("\260", '&#176;', $string);
265 // LATIN SMALL LETTER A WITH OGONEK
266 $string = str_replace("\261", '&#261;', $string);
267 // OGONEK
268 $string = str_replace("\262", '&#731;', $string);
269 // LATIN SMALL LETTER L WITH STROKE
270 $string = str_replace("\263", '&#322;', $string);
271 // ACUTE ACCENT
272 $string = str_replace("\264", '&#180;', $string);
273 // LATIN SMALL LETTER L WITH CARON
274 $string = str_replace("\265", '&#318;', $string);
275 // LATIN SMALL LETTER S WITH ACUTE
276 $string = str_replace("\266", '&#347;', $string);
277 // CARON
278 $string = str_replace("\267", '&#711;', $string);
279 // CEDILLA
280 $string = str_replace("\270", '&#184;', $string);
281 // LATIN SMALL LETTER S WITH CARON
282 $string = str_replace("\271", '&#353;', $string);
283 // LATIN SMALL LETTER S WITH CEDILLA
284 $string = str_replace("\272", '&#351;', $string);
285 // LATIN SMALL LETTER T WITH CARON
286 $string = str_replace("\273", '&#357;', $string);
287 // LATIN SMALL LETTER Z WITH ACUTE
288 $string = str_replace("\274", '&#378;', $string);
289 // DOUBLE ACUTE ACCENT
290 $string = str_replace("\275", '&#733;', $string);
291 // LATIN SMALL LETTER Z WITH CARON
292 $string = str_replace("\276", '&#382;', $string);
293 // LATIN SMALL LETTER Z WITH DOT ABOVE
294 $string = str_replace("\277", '&#380;', $string);
295 // LATIN CAPITAL LETTER R WITH ACUTE
296 $string = str_replace("\300", '&#340;', $string);
297 // LATIN CAPITAL LETTER A WITH ACUTE
298 $string = str_replace("\301", '&#193;', $string);
299 // LATIN CAPITAL LETTER A WITH CIRCUMFLEX
300 $string = str_replace("\302", '&#194;', $string);
301 // LATIN CAPITAL LETTER A WITH BREVE
302 $string = str_replace("\303", '&#258;', $string);
303 // LATIN CAPITAL LETTER A WITH DIAERESIS
304 $string = str_replace("\304", '&#196;', $string);
305 // LATIN CAPITAL LETTER L WITH ACUTE
306 $string = str_replace("\305", '&#313;', $string);
307 // LATIN CAPITAL LETTER C WITH ACUTE
308 $string = str_replace("\306", '&#262;', $string);
309 // LATIN CAPITAL LETTER C WITH CEDILLA
310 $string = str_replace("\307", '&#199;', $string);
311 // LATIN CAPITAL LETTER C WITH CARON
312 $string = str_replace("\310", '&#268;', $string);
313 // LATIN CAPITAL LETTER E WITH ACUTE
314 $string = str_replace("\311", '&#201;', $string);
315 // LATIN CAPITAL LETTER E WITH OGONEK
316 $string = str_replace("\312", '&#280;', $string);
317 // LATIN CAPITAL LETTER E WITH DIAERESIS
318 $string = str_replace("\313", '&#203;', $string);
319 // LATIN CAPITAL LETTER E WITH CARON
320 $string = str_replace("\314", '&#282;', $string);
321 // LATIN CAPITAL LETTER I WITH ACUTE
322 $string = str_replace("\315", '&#205;', $string);
323 // LATIN CAPITAL LETTER I WITH CIRCUMFLEX
324 $string = str_replace("\316", '&#206;', $string);
325 // LATIN CAPITAL LETTER D WITH CARON
326 $string = str_replace("\317", '&#270;', $string);
327 // LATIN CAPITAL LETTER D WITH STROKE
328 $string = str_replace("\320", '&#272;', $string);
329 // LATIN CAPITAL LETTER N WITH ACUTE
330 $string = str_replace("\321", '&#323;', $string);
331 // LATIN CAPITAL LETTER N WITH CARON
332 $string = str_replace("\322", '&#327;', $string);
333 // LATIN CAPITAL LETTER O WITH ACUTE
334 $string = str_replace("\323", '&#211;', $string);
335 // LATIN CAPITAL LETTER O WITH CIRCUMFLEX
336 $string = str_replace("\324", '&#212;', $string);
337 // LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
338 $string = str_replace("\325", '&#336;', $string);
339 // LATIN CAPITAL LETTER O WITH DIAERESIS
340 $string = str_replace("\326", '&#214;', $string);
341 // MULTIPLICATION SIGN
342 $string = str_replace("\327", '&#215;', $string);
343 // LATIN CAPITAL LETTER R WITH CARON
344 $string = str_replace("\330", '&#344;', $string);
345 // LATIN CAPITAL LETTER U WITH RING ABOVE
346 $string = str_replace("\331", '&#366;', $string);
347 // LATIN CAPITAL LETTER U WITH ACUTE
348 $string = str_replace("\332", '&#218;', $string);
349 // LATIN CAPITAL LETTER U WITH DOUBLE ACUTE
350 $string = str_replace("\333", '&#368;', $string);
351 // LATIN CAPITAL LETTER U WITH DIAERESIS
352 $string = str_replace("\334", '&#220;', $string);
353 // LATIN CAPITAL LETTER Y WITH ACUTE
354 $string = str_replace("\335", '&#221;', $string);
355 // LATIN CAPITAL LETTER T WITH CEDILLA
356 $string = str_replace("\336", '&#354;', $string);
357 // LATIN SMALL LETTER SHARP S
358 $string = str_replace("\337", '&#223;', $string);
359 // LATIN SMALL LETTER R WITH ACUTE
360 $string = str_replace("\340", '&#341;', $string);
361 // LATIN SMALL LETTER A WITH ACUTE
362 $string = str_replace("\341", '&#225;', $string);
363 // LATIN SMALL LETTER A WITH CIRCUMFLEX
364 $string = str_replace("\342", '&#226;', $string);
365 // LATIN SMALL LETTER A WITH BREVE
366 $string = str_replace("\343", '&#259;', $string);
367 // LATIN SMALL LETTER A WITH DIAERESIS
368 $string = str_replace("\344", '&#228;', $string);
369 // LATIN SMALL LETTER L WITH ACUTE
370 $string = str_replace("\345", '&#314;', $string);
371 // LATIN SMALL LETTER C WITH ACUTE
372 $string = str_replace("\346", '&#263;', $string);
373 // LATIN SMALL LETTER C WITH CEDILLA
374 $string = str_replace("\347", '&#231;', $string);
375 // LATIN SMALL LETTER C WITH CARON
376 $string = str_replace("\350", '&#269;', $string);
377 // LATIN SMALL LETTER E WITH ACUTE
378 $string = str_replace("\351", '&#233;', $string);
379 // LATIN SMALL LETTER E WITH OGONEK
380 $string = str_replace("\352", '&#281;', $string);
381 // LATIN SMALL LETTER E WITH DIAERESIS
382 $string = str_replace("\353", '&#235;', $string);
383 // LATIN SMALL LETTER E WITH CARON
384 $string = str_replace("\354", '&#283;', $string);
385 // LATIN SMALL LETTER I WITH ACUTE
386 $string = str_replace("\355", '&#237;', $string);
387 // LATIN SMALL LETTER I WITH CIRCUMFLEX
388 $string = str_replace("\356", '&#238;', $string);
389 // LATIN SMALL LETTER D WITH CARON
390 $string = str_replace("\357", '&#271;', $string);
391 // LATIN SMALL LETTER D WITH STROKE
392 $string = str_replace("\360", '&#273;', $string);
393 // LATIN SMALL LETTER N WITH ACUTE
394 $string = str_replace("\361", '&#324;', $string);
395 // LATIN SMALL LETTER N WITH CARON
396 $string = str_replace("\362", '&#328;', $string);
397 // LATIN SMALL LETTER O WITH ACUTE
398 $string = str_replace("\363", '&#243;', $string);
399 // LATIN SMALL LETTER O WITH CIRCUMFLEX
400 $string = str_replace("\364", '&#244;', $string);
401 // LATIN SMALL LETTER O WITH DOUBLE ACUTE
402 $string = str_replace("\365", '&#337;', $string);
403 // LATIN SMALL LETTER O WITH DIAERESIS
404 $string = str_replace("\366", '&#246;', $string);
405 // DIVISION SIGN
406 $string = str_replace("\367", '&#247;', $string);
407 // LATIN SMALL LETTER R WITH CARON
408 $string = str_replace("\370", '&#345;', $string);
409 // LATIN SMALL LETTER U WITH RING ABOVE
410 $string = str_replace("\371", '&#367;', $string);
411 // LATIN SMALL LETTER U WITH ACUTE
412 $string = str_replace("\372", '&#250;', $string);
413 // LATIN SMALL LETTER U WITH DOUBLE ACUTE
414 $string = str_replace("\373", '&#369;', $string);
415 // LATIN SMALL LETTER U WITH DIAERESIS
416 $string = str_replace("\374", '&#252;', $string);
417 // LATIN SMALL LETTER Y WITH ACUTE
418 $string = str_replace("\375", '&#253;', $string);
419 // LATIN SMALL LETTER T WITH CEDILLA
420 $string = str_replace("\376", '&#355;', $string);
421 // DOT ABOVE
422 $string = str_replace("\377", '&#729;', $string);
423
424 return $string;
425}
426
9be313d5 427/*
c37a12f8 428 ISO/IEC 8859-4:1998 Latin Alphabet No. 4
9be313d5 429*/
430
431function charset_decode_iso_8859_4 ($string) {
94965562 432 global $default_charset;
9be313d5 433
c37a12f8 434 if (strtolower($default_charset) == 'iso-8859-4')
435 return $string;
c37a12f8 436
437 /* Only do the slow convert if there are 8-bit characters */
438 if (! ereg("[\200-\377]", $string))
439 return $string;
440
c37a12f8 441 $string = str_replace ("\241", '&#260;', $string);
c37a12f8 442 $string = str_replace ("\242", '&#312;', $string);
c37a12f8 443 $string = str_replace ("\243", '&#342;', $string);
c37a12f8 444 $string = str_replace ("\245", '&#296;', $string);
c37a12f8 445 $string = str_replace ("\246", '&#315;', $string);
c37a12f8 446 $string = str_replace ("\251", '&#352;', $string);
c37a12f8 447 $string = str_replace ("\252", '&#274;', $string);
c37a12f8 448 $string = str_replace ("\253", '&#290;', $string);
c37a12f8 449 $string = str_replace ("\254", '&#358;', $string);
c37a12f8 450 $string = str_replace ("\256", '&#381;', $string);
c37a12f8 451 $string = str_replace ("\261", '&#261;', $string);
c37a12f8 452 $string = str_replace ("\262", '&#731;', $string);
c37a12f8 453 $string = str_replace ("\263", '&#343;', $string);
c37a12f8 454 $string = str_replace ("\265", '&#297;', $string);
c37a12f8 455 $string = str_replace ("\266", '&#316;', $string);
c37a12f8 456 $string = str_replace ("\267", '&#711;', $string);
c37a12f8 457 $string = str_replace ("\271", '&#353;', $string);
c37a12f8 458 $string = str_replace ("\272", '&#275;', $string);
c37a12f8 459 $string = str_replace ("\273", '&#291;', $string);
c37a12f8 460 $string = str_replace ("\274", '&#359;', $string);
c37a12f8 461 $string = str_replace ("\275", '&#330;', $string);
c37a12f8 462 $string = str_replace ("\276", '&#382;', $string);
c37a12f8 463 $string = str_replace ("\277", '&#331;', $string);
c37a12f8 464 $string = str_replace ("\300", '&#256;', $string);
c37a12f8 465 $string = str_replace ("\307", '&#302;', $string);
c37a12f8 466 $string = str_replace ("\310", '&#268;', $string);
c37a12f8 467 $string = str_replace ("\312", '&#280;', $string);
c37a12f8 468 $string = str_replace ("\314", '&#278;', $string);
c37a12f8 469 $string = str_replace ("\317", '&#298;', $string);
c37a12f8 470 $string = str_replace ("\320", '&#272;', $string);
c37a12f8 471 $string = str_replace ("\321", '&#325;', $string);
c37a12f8 472 $string = str_replace ("\322", '&#332;', $string);
c37a12f8 473 $string = str_replace ("\323", '&#310;', $string);
c37a12f8 474 $string = str_replace ("\331", '&#370;', $string);
c37a12f8 475 $string = str_replace ("\335", '&#360;', $string);
c37a12f8 476 $string = str_replace ("\336", '&#362;', $string);
c37a12f8 477 $string = str_replace ("\340", '&#257;', $string);
c37a12f8 478 $string = str_replace ("\347", '&#303;', $string);
c37a12f8 479 $string = str_replace ("\350", '&#269;', $string);
c37a12f8 480 $string = str_replace ("\352", '&#281;', $string);
c37a12f8 481 $string = str_replace ("\354", '&#279;', $string);
c37a12f8 482 $string = str_replace ("\357", '&#299;', $string);
c37a12f8 483 $string = str_replace ("\360", '&#273;', $string);
c37a12f8 484 $string = str_replace ("\361", '&#326;', $string);
c37a12f8 485 $string = str_replace ("\362", '&#333;', $string);
c37a12f8 486 $string = str_replace ("\363", '&#311;', $string);
c37a12f8 487 $string = str_replace ("\371", '&#371;', $string);
c37a12f8 488 $string = str_replace ("\375", '&#361;', $string);
c37a12f8 489 $string = str_replace ("\376", '&#363;', $string);
c37a12f8 490 $string = str_replace ("\377", '&#729;', $string);
491
492 // rest of charset is the same as ISO-8859-1
9be313d5 493 return (charset_decode_iso_8859_1($string));
494}
495
a2a7852b 496/* iso-8859-7 is Greek. */
497function charset_decode_iso_8859_7 ($string) {
498 global $default_charset;
499
500 if (strtolower($default_charset) == 'iso-8859-7') {
501 return $string;
502 }
503
504 /* Only do the slow convert if there are 8-bit characters */
505 if (!ereg("[\200-\377]", $string)) {
506 return $string;
507 }
508
509 /* Some diverse characters in the beginning */
510 $string = str_replace("\240", '&#160;', $string);
511 $string = str_replace("\241", '&#8216;', $string);
512 $string = str_replace("\242", '&#8217;', $string);
513 $string = str_replace("\243", '&#163;', $string);
514 $string = str_replace("\246", '&#166;', $string);
515 $string = str_replace("\247", '&#167;', $string);
516 $string = str_replace("\250", '&#168;', $string);
517 $string = str_replace("\251", '&#169;', $string);
518 $string = str_replace("\253", '&#171;', $string);
519 $string = str_replace("\254", '&#172;', $string);
520 $string = str_replace("\255", '&#173;', $string);
521 $string = str_replace("\257", '&#8213;', $string);
522 $string = str_replace("\260", '&#176;', $string);
523 $string = str_replace("\261", '&#177;', $string);
524 $string = str_replace("\262", '&#178;', $string);
525 $string = str_replace("\263", '&#179;', $string);
526
527 /* Horizontal bar (parentheki pavla) */
528 $string = str_replace ("\257", '&#8213;', $string);
529
530 /*
531 * ISO-8859-7 characters from 11/04 (0xB4) to 11/06 (0xB6)
532 * These are Unicode 900-902
533 */
b85a4575 534 $string = preg_replace("/([\264-\266])/e","'&#' . (ord('\\1')+720);",$string);
49c17806 535
a2a7852b 536 /* 11/07 (0xB7) Middle dot is the same in iso-8859-1 */
537 $string = str_replace("\267", '&#183;', $string);
538
539 /*
540 * ISO-8859-7 characters from 11/08 (0xB8) to 11/10 (0xBA)
541 * These are Unicode 900-902
542 */
b85a4575 543 $string = preg_replace("/([\270-\272])/e","'&#' . (ord('\\1')+720);",$string);
a2a7852b 544
545 /*
546 * 11/11 (0xBB) Right angle quotation mark is the same as in
547 * iso-8859-1
548 */
549 $string = str_replace("\273", '&#187;', $string);
550
551 /* And now the rest of the charset */
b85a4575 552 $string = preg_replace("/([\274-\376])/e","'&#'.(ord('\\1')+720);",$string);
a2a7852b 553
554 return $string;
555}
556
3ab35042 557/*
cd21d1aa 558 ISOIEC 8859-9:1999 Latin Alphabet No. 5
961ca3d8 559
3ab35042 560*/
561function charset_decode_iso_8859_9 ($string) {
94965562 562 global $default_charset;
3ab35042 563
564 if (strtolower($default_charset) == 'iso-8859-9')
565 return $string;
3ab35042 566
567 /* Only do the slow convert if there are 8-bit characters */
568 if (! ereg("[\200-\377]", $string))
569 return $string;
570
571 // latin capital letter g with breve 208->286
572 $string = str_replace("\320", '&#286;', $string);
573 // latin capital letter i with dot above 221->304
574 $string = str_replace("\335", '&#304;', $string);
575 // latin capital letter s with cedilla 222->350
576 $string = str_replace("\336", '&#350;', $string);
577 // latin small letter g with breve 240->287
578 $string = str_replace("\360", '&#287;', $string);
579 // latin small letter dotless i 253->305
580 $string = str_replace("\375", '&#305;', $string);
581 // latin small letter s with cedilla 254->351
582 $string = str_replace("\376", '&#351;', $string);
583
584 // rest of charset is the same as ISO-8859-1
585 return (charset_decode_iso_8859_1($string));
586}
587
588
9be313d5 589/*
c37a12f8 590 ISO/IEC 8859-13:1998 Latin Alphabet No. 7 (Baltic Rim)
9be313d5 591*/
9be313d5 592function charset_decode_iso_8859_13 ($string) {
94965562 593 global $default_charset;
c37a12f8 594
595 if (strtolower($default_charset) == 'iso-8859-13')
596 return $string;
c37a12f8 597
598 /* Only do the slow convert if there are 8-bit characters */
599 if (! ereg("[\200-\377]", $string))
600 return $string;
9be313d5 601
c37a12f8 602 $string = str_replace ("\241", '&#8221;', $string);
c37a12f8 603 $string = str_replace ("\245", '&#8222;', $string);
c37a12f8 604 $string = str_replace ("\250", '&#216;', $string);
c37a12f8 605 $string = str_replace ("\252", '&#342;', $string);
c37a12f8 606 $string = str_replace ("\257", '&#198;', $string);
c37a12f8 607 $string = str_replace ("\264", '&#8220;', $string);
c37a12f8 608 $string = str_replace ("\270", '&#248;', $string);
c37a12f8 609 $string = str_replace ("\272", '&#343;', $string);
c37a12f8 610 $string = str_replace ("\277", '&#230;', $string);
c37a12f8 611 $string = str_replace ("\300", '&#260;', $string);
c37a12f8 612 $string = str_replace ("\301", '&#302;', $string);
c37a12f8 613 $string = str_replace ("\302", '&#256;', $string);
c37a12f8 614 $string = str_replace ("\303", '&#262;', $string);
c37a12f8 615 $string = str_replace ("\306", '&#280;', $string);
c37a12f8 616 $string = str_replace ("\307", '&#274;', $string);
c37a12f8 617 $string = str_replace ("\310", '&#268;', $string);
c37a12f8 618 $string = str_replace ("\312", '&#377;', $string);
c37a12f8 619 $string = str_replace ("\313", '&#278;', $string);
c37a12f8 620 $string = str_replace ("\314", '&#290;', $string);
c37a12f8 621 $string = str_replace ("\315", '&#310;', $string);
c37a12f8 622 $string = str_replace ("\316", '&#298;', $string);
c37a12f8 623 $string = str_replace ("\317", '&#315;', $string);
c37a12f8 624 $string = str_replace ("\320", '&#352;', $string);
c37a12f8 625 $string = str_replace ("\321", '&#323;', $string);
c37a12f8 626 $string = str_replace ("\322", '&#325;', $string);
c37a12f8 627 $string = str_replace ("\324", '&#332;', $string);
c37a12f8 628 $string = str_replace ("\330", '&#370;', $string);
c37a12f8 629 $string = str_replace ("\331", '&#321;', $string);
c37a12f8 630 $string = str_replace ("\332", '&#346;', $string);
c37a12f8 631 $string = str_replace ("\333", '&#362;', $string);
c37a12f8 632 $string = str_replace ("\335", '&#379;', $string);
c37a12f8 633 $string = str_replace ("\336", '&#381;', $string);
c37a12f8 634 $string = str_replace ("\340", '&#261;', $string);
c37a12f8 635 $string = str_replace ("\341", '&#303;', $string);
c37a12f8 636 $string = str_replace ("\342", '&#257;', $string);
c37a12f8 637 $string = str_replace ("\343", '&#263;', $string);
c37a12f8 638 $string = str_replace ("\346", '&#281;', $string);
c37a12f8 639 $string = str_replace ("\347", '&#275;', $string);
c37a12f8 640 $string = str_replace ("\350", '&#269;', $string);
c37a12f8 641 $string = str_replace ("\352", '&#378;', $string);
c37a12f8 642 $string = str_replace ("\353", '&#279;', $string);
c37a12f8 643 $string = str_replace ("\354", '&#291;', $string);
c37a12f8 644 $string = str_replace ("\355", '&#311;', $string);
c37a12f8 645 $string = str_replace ("\356", '&#299;', $string);
c37a12f8 646 $string = str_replace ("\357", '&#316;', $string);
c37a12f8 647 $string = str_replace ("\360", '&#353;', $string);
c37a12f8 648 $string = str_replace ("\361", '&#324;', $string);
c37a12f8 649 $string = str_replace ("\362", '&#326;', $string);
c37a12f8 650 $string = str_replace ("\364", '&#333;', $string);
c37a12f8 651 $string = str_replace ("\370", '&#371;', $string);
c37a12f8 652 $string = str_replace ("\371", '&#322;', $string);
c37a12f8 653 $string = str_replace ("\372", '&#347;', $string);
c37a12f8 654 $string = str_replace ("\373", '&#363;', $string);
c37a12f8 655 $string = str_replace ("\375", '&#380;', $string);
c37a12f8 656 $string = str_replace ("\376", '&#382;', $string);
c37a12f8 657 $string = str_replace ("\377", '&#8217;', $string);
658
659 // rest of charset is the same as ISO-8859-1
9be313d5 660 return (charset_decode_iso_8859_1($string));
661}
662
a2a7852b 663/*
664 * iso-8859-15 is Latin 9 and has very much the same use as Latin 1
665 * but has the Euro symbol and some characters needed for French.
666 */
667function charset_decode_iso_8859_15 ($string) {
668 // Euro sign
669 $string = str_replace ("\244", '&#8364;', $string);
670 // Latin capital letter S with caron
84556805 671 $string = str_replace ("\246", '&#352;', $string);
a2a7852b 672 // Latin small letter s with caron
673 $string = str_replace ("\250", '&#353;', $string);
674 // Latin capital letter Z with caron
675 $string = str_replace ("\264", '&#381;', $string);
676 // Latin small letter z with caron
677 $string = str_replace ("\270", '&#382;', $string);
678 // Latin capital ligature OE
679 $string = str_replace ("\274", '&#338;', $string);
680 // Latin small ligature oe
681 $string = str_replace ("\275", '&#339;', $string);
682 // Latin capital letter Y with diaeresis
683 $string = str_replace ("\276", '&#376;', $string);
684
685 return (charset_decode_iso_8859_1($string));
686}
687
84556805 688/* ISO-8859-5 is Cyrillic */
a2a7852b 689function charset_decode_iso_8859_5 ($string) {
690 // Convert to KOI8-R, then return this decoded.
691 $string = convert_cyr_string($string, 'i', 'k');
692 return charset_decode_koi8r($string);
693}
694
695/* Remove all 8 bit characters from all other ISO-8859 character sets */
696function charset_decode_iso_8859_default ($string) {
697 return (strtr($string, "\240\241\242\243\244\245\246\247".
1fd97780 698 "\250\251\252\253\254\255\256\257".
699 "\260\261\262\263\264\265\266\267".
700 "\270\271\272\273\274\275\276\277".
701 "\300\301\302\303\304\305\306\307".
702 "\310\311\312\313\314\315\316\317".
703 "\320\321\322\323\324\325\326\327".
704 "\330\331\332\333\334\335\336\337".
705 "\340\341\342\343\344\345\346\347".
706 "\350\351\352\353\354\355\356\357".
707 "\360\361\362\363\364\365\366\367".
a2a7852b 708 "\370\371\372\373\374\375\376\377",
1fd97780 709 "????????????????????????????????????????".
710 "????????????????????????????????????????".
711 "????????????????????????????????????????".
712 "????????"));
a2a7852b 713
714}
715
716/*
717 * This is the same as ISO-646-NO and is used by some
718 * Microsoft programs when sending Norwegian characters
719 */
720function charset_decode_ns_4551_1 ($string) {
721 /*
722 * These characters are:
723 * Latin capital letter AE
724 * Latin capital letter O with stroke
725 * Latin capital letter A with ring above
726 * and the same as small letters
727 */
728