From feb3185124bd5f1257c6bdfaeb2300845c923ff5 Mon Sep 17 00:00:00 2001 From: Andrew Dolgov Date: Mon, 13 Aug 2007 04:31:57 +0100 Subject: magpie: only force convert encoding if initial parsing failed --- magpierss/rss_parse.inc | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) (limited to 'magpierss/rss_parse.inc') diff --git a/magpierss/rss_parse.inc b/magpierss/rss_parse.inc index 0b2ddc83a..8a67523b5 100644 --- a/magpierss/rss_parse.inc +++ b/magpierss/rss_parse.inc @@ -132,7 +132,33 @@ class MagpieRSS { xml_set_character_data_handler( $this->parser, 'feed_cdata' ); $status = xml_parse( $this->parser, $source ); + + # try to force convert everything to UTF-8 and parse again + # to salvage at least some data from the feed + if (! $status) { + $errorcode = xml_get_error_code( $this->parser ); + if ( $errorcode != XML_ERROR_NONE ) { + + xml_parser_free( $this->parser ); + + list($parser, $source) = $this->create_parser($source, + $output_encoding, $input_encoding, $detect_encoding); + + $source = mb_convert_encoding($source, "UTF-8", + mb_detect_encoding($source)); + + $this->parser = $parser; + xml_set_object( $this->parser, $this ); + xml_set_element_handler($this->parser, + 'feed_start_element', 'feed_end_element' ); + + xml_set_character_data_handler( $this->parser, 'feed_cdata' ); + + $status = xml_parse( $this->parser, $source); + } + } + if (! $status ) { $errorcode = xml_get_error_code( $this->parser ); if ( $errorcode != XML_ERROR_NONE ) { -- cgit v1.2.3