Generic arrays are now supported
[core.git] / inc / classes / main / parser / xml / class_XmlParser.php
index e21044f7f2f1934660ba7a1cfb60b0ddc8da10af..9374dc61259d96845b99ac183c7c0d741c13d43e 100644 (file)
@@ -4,7 +4,7 @@
  *
  * @author             Roland Haeder <webmaster@ship-simu.org>
  * @version            0.0.0
- * @copyright  Copyright (c) 2007, 2008 Roland Haeder, 2009 Core Developer Team
+ * @copyright  Copyright (c) 2007, 2008 Roland Haeder, 2009 - 2012 Core Developer Team
  * @license            GNU GPL 3.0 or any newer version
  * @link               http://www.ship-simu.org
  *
@@ -43,7 +43,7 @@ class XmlParser extends BaseParser implements Parseable {
         * @param       $templateInstance       A CompileableTemplate instance
         * @return      $parserInstance         An instance of this parser
         */
-       public final static function createXmlParser (CompileableTemplate $templateInstance) {
+       public static final function createXmlParser (CompileableTemplate $templateInstance) {
                // Get a new instance
                $parserInstance = new XmlParser();
 
@@ -63,11 +63,21 @@ class XmlParser extends BaseParser implements Parseable {
         */
        public function parseXmlContent ($content) {
                // Convert all to UTF8
-               if (function_exists('recode')) {
-                       $content = recode("html..utf8", $content);
+               if (empty($content)) {
+                       // No empty content!
+                       $this->debugOutput('Empty content! Backtrace: <pre>');
+                       debug_print_backtrace();
+                       $this->debugOutput('</pre>');
+                       die();
+               } elseif (function_exists('recode')) {
+                       // Recode found, so use it
+                       $content = recode('html..utf8', $content);
+               } elseif (function_exists('mb_convert_encoding')) {
+                       // Use mb_convert_encoding()
+                       $content = mb_convert_encoding($content, 'UTF-8', 'auto');
                } else {
                        // @TODO We need to find a fallback solution here
-                       $this->partialStub('Cannot find recode extension!');
+                       $this->partialStub('Cannot find recode/mbstring extension!');
                } // END - if
 
                // Get an XML parser
@@ -76,7 +86,10 @@ class XmlParser extends BaseParser implements Parseable {
                // Force case-folding to on
                xml_parser_set_option($xmlParser, XML_OPTION_CASE_FOLDING, true);
 
-               // Get template instance
+               // Set UTF-8
+               xml_parser_set_option($xmlParser, XML_OPTION_TARGET_ENCODING, 'UTF-8');
+
+               // Get instance (we need this :( )
                $templateInstance = $this->getTemplateInstance();
 
                // Set object
@@ -89,7 +102,7 @@ class XmlParser extends BaseParser implements Parseable {
                // Now parse the XML tree
                if (!xml_parse($xmlParser, $content)) {
                        // Error found in XML!
-                       //* DEBUG: */ die('<pre>'.htmlentities($content).'</pre>');
+                       //* DEBUG: */ die(__METHOD__ . ':<pre>'.htmlentities($content).'</pre>');
                        throw new XmlParserException(array($this, $xmlParser), self::EXCEPTION_XML_PARSER_ERROR);
                } // END - if