diff options
Diffstat (limited to 'includes')
-rw-r--r-- | includes/common.inc | 22 |
1 files changed, 20 insertions, 2 deletions
diff --git a/includes/common.inc b/includes/common.inc index 972f62947..8ef824dac 100644 --- a/includes/common.inc +++ b/includes/common.inc @@ -1273,17 +1273,35 @@ function drupal_xml_parser_create(&$data) { /* * Unsupported encodings are converted here into UTF-8. - * Requires iconv, see http://www.php.net/iconv + * Requires the iconv, GNU recode or mbstring PHP extension. */ $php_supported = array('utf-8', 'iso-8859-1', 'us-ascii'); if (!in_array(strtolower($encoding), $php_supported)) { if (function_exists('iconv')) { - $out = iconv($encoding, 'utf-8', $data); + $out = @iconv($encoding, 'utf-8', $data); if ($out !== false) { $data = $out; $encoding = 'utf-8'; } } + else if (function_exists('mb_convert_encoding')) { + $out = @mb_convert_encoding($data, 'utf-8', $encoding); + if ($out !== false) { + $data = $out; + $encoding = 'utf-8'; + } + } + else if (function_exists('recode_string')) { + $out = @recode_string($encoding . '..utf-8', $data); + if ($out !== false) { + $data = $out; + $encoding = 'utf-8'; + } + } + else { + watchdog(t("Unsupported XML encoding '%s'. Please install iconv, GNU recode or mbstring for PHP.", $encoding)); + return 0; + } } $xml_parser = xml_parser_create($encoding); |