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