magpie: only force convert encoding if initial parsing failed

master
Andrew Dolgov 18 years ago
parent 3a486dec89
commit feb3185124

@ -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

@ -133,6 +133,32 @@ class MagpieRSS {
$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 ) {

Loading…
Cancel
Save