]> git.wh0rd.org - tt-rss.git/blobdiff - classes/feedparser.php
pngcrush.sh
[tt-rss.git] / classes / feedparser.php
index 239fdb7a69b0c14cb17b4dbd40b96da755291850..a5e406149d46062c620b60a6ce53738f0b0d13d8 100644 (file)
@@ -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;
        }
-} ?>
+}