X-Git-Url: https://git.mxchange.org/?p=core.git;a=blobdiff_plain;f=inc%2Fclasses%2Fmain%2Fparser%2Fxml%2Fclass_XmlParser.php;h=1e25cc50710bba41129748a5e63c9beda81988e5;hp=d026f6daddd641ac1db5b5e72937ed3acbbc7475;hb=fdc6a02b5e6c2155cda61fcc345c7583b734ab85;hpb=74002d16ea26fbdd6efa8c042efe420f82490340 diff --git a/inc/classes/main/parser/xml/class_XmlParser.php b/inc/classes/main/parser/xml/class_XmlParser.php index d026f6da..1e25cc50 100644 --- a/inc/classes/main/parser/xml/class_XmlParser.php +++ b/inc/classes/main/parser/xml/class_XmlParser.php @@ -2,11 +2,11 @@ /** * A Xml Parser class * - * @author Roland Haeder + * @author Roland Haeder * @version 0.0.0 - * @copyright Copyright (c) 2007, 2008 Roland Haeder, 2009 Core Developer Team + * @copyright Copyright (c) 2007, 2008 Roland Haeder, 2009 - 2013 Core Developer Team * @license GNU GPL 3.0 or any newer version - * @link http://www.ship-simu.org + * @link http://www.shipsimu.org * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -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,34 +63,46 @@ class XmlParser extends BaseParser implements Parseable { */ public function parseXmlContent ($content) { // Convert all to UTF8 - if (function_exists('recode')) { + if (empty($content)) { + // No empty content! + self::createDebugInstance(__CLASS__)->debugOutput('Empty content! Backtrace:
');
+			debug_print_backtrace();
+			self::createDebugInstance(__CLASS__)->debugOutput('
'); + exit(); + } 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 $xmlParser = xml_parser_create(); // Force case-folding to on - xml_parser_set_option($xmlParser, XML_OPTION_CASE_FOLDING, true); + xml_parser_set_option($xmlParser, XML_OPTION_CASE_FOLDING, TRUE); // Set UTF-8 xml_parser_set_option($xmlParser, XML_OPTION_TARGET_ENCODING, 'UTF-8'); + // Get instance (we need this :( ) + $templateInstance = $this->getTemplateInstance(); + // Set object - xml_set_object($xmlParser, $this->getTemplateInstance()); + xml_set_object($xmlParser, $templateInstance); // Set handler call-backs - xml_set_element_handler($xmlParser, 'startElement', 'endElement'); + xml_set_element_handler($xmlParser, 'startElement', 'finishElement'); xml_set_character_data_handler($xmlParser, 'characterHandler'); // Now parse the XML tree if (!xml_parse($xmlParser, $content)) { // Error found in XML! - //* DEBUG: */ die('
'.htmlentities($content).'
'); + //* DEBUG: */ exit(__METHOD__ . ':
'.htmlentities($content).'
'); throw new XmlParserException(array($this, $xmlParser), self::EXCEPTION_XML_PARSER_ERROR); } // END - if