00001 <?php
00002
00003
00004
00005
00014 if (isset($cfg['AllowAnywhereRecoding'])
00015 && $cfg['AllowAnywhereRecoding']
00016 && $allow_recoding) {
00017
00018 if ($cfg['RecodingEngine'] == 'recode') {
00019 if (!@extension_loaded('recode')) {
00020 PMA_dl('recode');
00021 if (!@extension_loaded('recode')) {
00022 echo $strCantLoadRecodeIconv;
00023 exit;
00024 }
00025 }
00026 $PMA_recoding_engine = 'recode';
00027 } else if ($cfg['RecodingEngine'] == 'iconv') {
00028 if (!@extension_loaded('iconv')) {
00029 PMA_dl('iconv');
00030 if (!@extension_loaded('iconv')) {
00031 echo $strCantLoadRecodeIconv;
00032 exit;
00033 }
00034 }
00035 $PMA_recoding_engine = 'iconv';
00036 } else {
00037 if (@extension_loaded('iconv')) {
00038 $PMA_recoding_engine = 'iconv';
00039 } else if (@extension_loaded('recode')) {
00040 $PMA_recoding_engine = 'recode';
00041 } else {
00042 PMA_dl('iconv');
00043 if (!@extension_loaded('iconv')) {
00044 PMA_dl('recode');
00045 if (!@extension_loaded('recode')) {
00046 echo $strCantLoadRecodeIconv;
00047 exit;
00048 } else {
00049 $PMA_recoding_engine = 'recode';
00050 }
00051 } else {
00052 $PMA_recoding_engine = 'iconv';
00053 }
00054 }
00055 }
00056 }
00057
00058 define('PMA_CHARSET_NONE', 0);
00059 define('PMA_CHARSET_ICONV', 1);
00060 define('PMA_CHARSET_LIBICONV', 2);
00061 define('PMA_CHARSET_RECODE', 3);
00062
00063 if (!isset($cfg['IconvExtraParams'])) {
00064 $cfg['IconvExtraParams'] = '';
00065 }
00066
00067
00068 if (isset($cfg['AllowAnywhereRecoding'])
00069 && $cfg['AllowAnywhereRecoding']
00070 && $allow_recoding) {
00071
00072 if (!isset($PMA_recoding_engine)) {
00073 $PMA_recoding_engine = $cfg['RecodingEngine'];
00074 }
00075 if ($PMA_recoding_engine == 'iconv') {
00076 if (@function_exists('iconv')) {
00077 $PMA_recoding_engine = PMA_CHARSET_ICONV;
00078 } else if (@function_exists('libiconv')) {
00079 $PMA_recoding_engine = PMA_CHARSET_LIBICONV;
00080 } else {
00081 $PMA_recoding_engine = PMA_CHARSET_NONE;
00082
00083 if (!isset($GLOBALS['is_header_sent'])) {
00084 include('./header.inc.php');
00085 }
00086 echo $strCantUseRecodeIconv;
00087 require_once('./footer.inc.php');
00088 exit();
00089 }
00090 } else if ($PMA_recoding_engine == 'recode') {
00091 if (@function_exists('recode_string')) {
00092 $PMA_recoding_engine = PMA_CHARSET_RECODE;
00093 } else {
00094 $PMA_recoding_engine = PMA_CHARSET_NONE;
00095
00096 require_once('./header.inc.php');
00097 echo $strCantUseRecodeIconv;
00098 require_once('./footer.inc.php');
00099 exit;
00100 }
00101 } else {
00102 if (@function_exists('iconv')) {
00103 $PMA_recoding_engine = PMA_CHARSET_ICONV;
00104 } else if (@function_exists('libiconv')) {
00105 $PMA_recoding_engine = PMA_CHARSET_LIBICONV;
00106 } elseif (@function_exists('recode_string')) {
00107 $PMA_recoding_engine = PMA_CHARSET_RECODE;
00108 } else {
00109 $PMA_recoding_engine = PMA_CHARSET_NONE;
00110
00111 require_once('./header.inc.php');
00112 echo $strCantUseRecodeIconv;
00113 require_once('./footer.inc.php');
00114 exit;
00115 }
00116 }
00117 } else {
00118 $PMA_recoding_engine = PMA_CHARSET_NONE;
00119 }
00120
00121
00138 function PMA_convert_display_charset($what) {
00139 global $cfg, $allow_recoding, $charset, $convcharset;
00140
00141 if (!(isset($cfg['AllowAnywhereRecoding']) && $cfg['AllowAnywhereRecoding'] && $allow_recoding)
00142 || $convcharset == $charset
00143 || PMA_MYSQL_INT_VERSION >= 40100 ) {
00144 return $what;
00145 }
00146 else if (is_array($what)) {
00147 $result = array();
00148 foreach ($what AS $key => $val) {
00149 if (is_string($val) || is_array($val)) {
00150 if (is_string($key)) {
00151 $result[PMA_convert_display_charset($key)] = PMA_convert_display_charset($val);
00152 } else {
00153 $result[$key] = PMA_convert_display_charset($val);
00154 }
00155 } else {
00156 $result[$key] = $val;
00157 }
00158 }
00159 return $result;
00160 }
00161 else if (is_string($what)) {
00162
00163 switch ($GLOBALS['PMA_recoding_engine']) {
00164 case PMA_CHARSET_RECODE:
00165 return recode_string($convcharset . '..' . $charset, $what);
00166 case PMA_CHARSET_ICONV:
00167 return iconv($convcharset, $charset . $cfg['IconvExtraParams'], $what);
00168 case PMA_CHARSET_LIBICONV:
00169 return libiconv($convcharset, $charset, $what);
00170 default:
00171 return $what;
00172 }
00173 }
00174 else if (is_object($what)) {
00175
00176 if (@is_string($what->name)) {
00177 $what->name = PMA_convert_display_charset($what->name);
00178 }
00179 if (@is_string($what->table)) {
00180 $what->table = PMA_convert_display_charset($what->table);
00181 }
00182 if (@is_string($what->Database)) {
00183 $what->Database = PMA_convert_display_charset($what->Database);
00184 }
00185 return $what;
00186 }
00187 else {
00188
00189 return $what;
00190 }
00191 }
00192
00193
00210 function PMA_convert_charset($what) {
00211 global $cfg, $allow_recoding, $charset, $convcharset;
00212
00213 if (!(isset($cfg['AllowAnywhereRecoding']) && $cfg['AllowAnywhereRecoding'] && $allow_recoding)
00214 || $convcharset == $charset) {
00215 return $what;
00216 } else {
00217 switch ($GLOBALS['PMA_recoding_engine']) {
00218 case PMA_CHARSET_RECODE:
00219 return recode_string($charset . '..' . $convcharset, $what);
00220 case PMA_CHARSET_ICONV:
00221 return iconv($charset, $convcharset . $cfg['IconvExtraParams'], $what);
00222 case PMA_CHARSET_LIBICONV:
00223 return libiconv($charset, $convcharset, $what);
00224 default:
00225 return $what;
00226 }
00227 }
00228 }
00229
00244 function PMA_convert_string($src_charset, $dest_charset, $what) {
00245 if ($src_charset == $dest_charset) return $what;
00246 switch ($GLOBALS['PMA_recoding_engine']) {
00247 case PMA_CHARSET_RECODE:
00248 return recode_string($src_charset . '..' . $dest_charset, $what);
00249 case PMA_CHARSET_ICONV:
00250 return iconv($src_charset, $dest_charset . $GLOBALS['cfg']['IconvExtraParams'], $what);
00251 case PMA_CHARSET_LIBICONV:
00252 return libiconv($src_charset, $dest_charset, $what);
00253 default:
00254 return $what;
00255 }
00256 }
00257
00258
00274 function PMA_convert_file($src_charset, $dest_charset, $file) {
00275 switch ($GLOBALS['PMA_recoding_engine']) {
00276 case PMA_CHARSET_RECODE:
00277 case PMA_CHARSET_ICONV:
00278 case PMA_CHARSET_LIBICONV:
00279 $tmpfname = tempnam('', 'PMA_convert_file');
00280 $fin = fopen($file, 'r');
00281 $fout = fopen($tmpfname, 'w');
00282 if ($GLOBALS['PMA_recoding_engine'] == PMA_CHARSET_RECODE) {
00283 recode_file($src_charset . '..' . $dest_charset, $fin, $fout);
00284 } else {
00285 while (!feof($fin)) {
00286 $line = fgets($fin, 4096);
00287 if ($GLOBALS['PMA_recoding_engine'] == PMA_CHARSET_ICONV) {
00288 $dist = iconv($src_charset, $dest_charset . $GLOBALS['cfg']['IconvExtraParams'], $line);
00289 } else {
00290 $dist = libiconv($src_charset, $dest_charset, $line);
00291 }
00292 fputs($fout, $dist);
00293 }
00294 }
00295 fclose($fin);
00296 fclose($fout);
00297 unlink($file);
00298
00299 return $tmpfname;
00300 default:
00301 return $file;
00302 }
00303 }
00304
00305 ?>