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);
}
$this->type = $this::FEED_RSS;
break;
case "feed":
+ case "atom:feed":
$this->type = $this::FEED_ATOM;
break;
default:
$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");
break;
}
+
+ if ($this->title) $this->title = trim($this->title);
+ if ($this->link) $this->link = trim($this->link);
+
} else {
if( !isset($this->error) ){
$this->error = "Unknown/unsupported feed type";
foreach ($links as $link) {
if (!$rel || $link->hasAttribute('rel') && $link->getAttribute('rel') == $rel) {
- array_push($rv, $link->getAttribute('href'));
+ array_push($rv, trim($link->getAttribute('href')));
}
}
break;
foreach ($links as $link) {
if (!$rel || $link->hasAttribute('rel') && $link->getAttribute('rel') == $rel) {
- array_push($rv, $link->getAttribute('href'));
+ array_push($rv, trim($link->getAttribute('href')));
}
}
break;
return $rv;
}
-} ?>
+}