<?php
+
/**
* SquirrelMail internationalization functions
*
- * Copyright (c) 1999-2005 The SquirrelMail Project Team
- * Licensed under the GNU GPL. For full terms see the file COPYING.
- *
* This file contains variuos functions that are needed to do
* internationalization of SquirrelMail.
*
* Internally the output character set is used. Other characters are
* encoded using Unicode entities according to HTML 4.0.
*
+ * @copyright © 1999-2005 The SquirrelMail Project Team
+ * @license http://opensource.org/licenses/gpl-license.php GNU Public License
* @version $Id$
* @package squirrelmail
* @subpackage i18n
* @param string $string Text to be decoded
* @param boolean $force_decode converts string to html without $charset!=$default_charset check.
* Argument is available since 1.5.1 and 1.4.5.
+ * @param boolean $save_html disables htmlspecialchars() in order to preserve
+ * html formating. Use with care. Available since 1.5.1
* @return string decoded string
*/
-function charset_decode ($charset, $string, $force_decode=false) {
+function charset_decode ($charset, $string, $force_decode=false, $save_html=false) {
global $languages, $squirrelmail_language, $default_charset;
global $use_php_recode, $use_php_iconv, $aggressive_decoding;
// Don't do conversion if charset is the same.
if ( ! $force_decode && $charset == strtolower($default_charset) )
- return htmlspecialchars($string);
+ return ($save_html ? $string : htmlspecialchars($string));
// catch iso-8859-8-i thing
if ( $charset == "iso-8859-8-i" )
// other charsets can be converted to utf-8 without loss.
// and output string is smaller
$string = recode_string($charset . "..utf-8",$string);
- return htmlspecialchars($string);
+ return ($save_html ? $string : htmlspecialchars($string));
} else {
$string = recode_string($charset . "..html",$string);
// recode does not convert single quote, htmlspecialchars does.
$string = str_replace("'", ''', $string);
+ // undo html specialchars
+ if ($save_html)
+ $string=str_replace(array('&','"','<','>'),
+ array('&','"','<','>'),$string);
return $string;
}
}
// iconv functions does not have html target and can be used only with utf-8
if ( $use_php_iconv && $default_charset=='utf-8') {
$string = iconv($charset,$default_charset,$string);
- return htmlspecialchars($string);
+ return ($save_html ? $string : htmlspecialchars($string));
}
// If we don't use recode and iconv, we'll do it old way.
/* All HTML special characters are 7 bit and can be replaced first */
-
- $string = htmlspecialchars ($string);
+ if (! $save_html) $string = htmlspecialchars ($string);
/* controls cpu and memory intensive decoding cycles */
if (! isset($aggressive_decoding) || $aggressive_decoding=="" ) {
$decodefile=SM_PATH . 'functions/decode/' . $decode . '.php';
if (file_exists($decodefile)) {
include_once($decodefile);
- $ret = call_user_func('charset_decode_'.$decode, $string);
+ // send $save_html argument to decoding function. needed for iso-2022-xx decoding.
+ $ret = call_user_func('charset_decode_'.$decode, $string, $save_html);
} else {
$ret = $string;
}
*/
$charset=preg_replace("/[-:.\/\\\]/",'_',$charset);
+ // OE ks_c_5601_1987 > cp949
+ $charset=str_replace('ks_c_5601_1987','cp949',$charset);
+ // Moz x-euc-tw > euc-tw
+ $charset=str_replace('x_euc','euc',$charset);
+ // Moz x-windows-949 > cp949
+ $charset=str_replace('x_windows_','cp',$charset);
+
// windows-125x and cp125x charsets
$charset=str_replace('windows_','cp',$charset);