X-Git-Url: https://git.wh0rd.org/?a=blobdiff_plain;f=classes%2Ffeedparser.php;h=a5e406149d46062c620b60a6ce53738f0b0d13d8;hb=HEAD;hp=239fdb7a69b0c14cb17b4dbd40b96da755291850;hpb=31bd6f7643bf139802a224f4584caca3cbbcc9b8;p=tt-rss.git diff --git a/classes/feedparser.php b/classes/feedparser.php index 239fdb7a..a5e40614 100644 --- a/classes/feedparser.php +++ b/classes/feedparser.php @@ -15,7 +15,11 @@ class FeedParser { function normalize_encoding($data) { if (preg_match('/^(<\?xml[\t\n\r ].*?encoding[\t\n\r ]*=[\t\n\r ]*["\'])(.+?)(["\'].*?\?>)/s', $data, $matches) === 1) { - $data = mb_convert_encoding($data, 'UTF-8', $matches[2]); + + $encoding = strtolower($matches[2]); + + if (in_array($encoding, array_map('strtolower', mb_list_encodings()))) + $data = mb_convert_encoding($data, 'UTF-8', $encoding); $data = preg_replace('/^<\?xml[\t\n\r ].*?\?>/s', $matches[1] . "UTF-8" . $matches[3] , $data); } @@ -115,6 +119,7 @@ class FeedParser { $this->type = $this::FEED_RSS; break; case "feed": + case "atom:feed": $this->type = $this::FEED_ATOM; break; default: @@ -140,9 +145,14 @@ class FeedParser { $link = $xpath->query("//atom:feed/atom:link[not(@rel)]")->item(0); + if (!$link) + $link = $xpath->query("//atom:feed/atom:link[@rel='alternate']")->item(0); + if (!$link) $link = $xpath->query("//atom03:feed/atom03:link[not(@rel)]")->item(0); + if (!$link) + $link = $xpath->query("//atom03:feed/atom03:link[@rel='alternate']")->item(0); if ($link && $link->hasAttributes()) { $this->link = $link->getAttribute("href"); @@ -273,4 +283,4 @@ class FeedParser { return $rv; } -} ?> +}