summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--includes/common.inc22
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);