]> git.wh0rd.org Git - tt-rss.git/commitdiff
magpie: only force convert encoding if initial parsing failed
authorAndrew Dolgov <fox@bah.spb.su>
Mon, 13 Aug 2007 03:31:57 +0000 (04:31 +0100)
committerAndrew Dolgov <fox@bah.spb.su>
Mon, 13 Aug 2007 03:31:57 +0000 (04:31 +0100)
magpierss/rss_fetch.inc
magpierss/rss_parse.inc

index dd475e31d649d1256f9c2ba983b46d326a6be41b..77a1a704f9abfa3bc099520ca38e0e39663a3a90 100644 (file)
@@ -313,7 +313,7 @@ function _convert_entities ($string) {
     Output:     parsed RSS object (see rss_parse)
 \*=======================================================================*/
 function _response_to_rss ($resp) {
-    $converted_source = _convert_entities(mb_convert_encoding($resp->results, "UTF-8", mb_detect_encoding($resp->results)));
+    $converted_source = _convert_entities($resp->results);
     $rss = new MagpieRSS( $converted_source, MAGPIE_OUTPUT_ENCODING, "UTF-8", false);
     
     // if RSS parsed successfully       
index 0b2ddc83a963e1dea8210afb4f2f62b1517ced55..8a67523b50ee5710f9f12b54e22073cd437857c2 100644 (file)
@@ -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 ) {