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