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