magpie: only force convert encoding if initial parsing failed
This commit is contained in:
parent
3a486dec89
commit
feb3185124
|
@ -313,7 +313,7 @@ function _convert_entities ($string) {
|
||||||
Output: parsed RSS object (see rss_parse)
|
Output: parsed RSS object (see rss_parse)
|
||||||
\*=======================================================================*/
|
\*=======================================================================*/
|
||||||
function _response_to_rss ($resp) {
|
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);
|
$rss = new MagpieRSS( $converted_source, MAGPIE_OUTPUT_ENCODING, "UTF-8", false);
|
||||||
|
|
||||||
// if RSS parsed successfully
|
// if RSS parsed successfully
|
||||||
|
|
|
@ -132,7 +132,33 @@ class MagpieRSS {
|
||||||
xml_set_character_data_handler( $this->parser, 'feed_cdata' );
|
xml_set_character_data_handler( $this->parser, 'feed_cdata' );
|
||||||
|
|
||||||
$status = xml_parse( $this->parser, $source );
|
$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 ) {
|
if (! $status ) {
|
||||||
$errorcode = xml_get_error_code( $this->parser );
|
$errorcode = xml_get_error_code( $this->parser );
|
||||||
if ( $errorcode != XML_ERROR_NONE ) {
|
if ( $errorcode != XML_ERROR_NONE ) {
|
||||||
|
|
Loading…
Reference in New Issue