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