diff options
author | Sean Molenaar <SMillerDev@users.noreply.github.com> | 2019-03-17 08:23:37 +0100 |
---|---|---|
committer | Benjamin Brahmer <info@b-brahmer.de> | 2019-03-17 08:23:37 +0100 |
commit | 2698214c4122d4f5f63f26f7a204035fe0d4f211 (patch) | |
tree | e1a033654736cc68f698af7110e8e17fdb0c2e55 /lib/Fetcher | |
parent | f5e25d2edef3360ed7fcdc1ecc663cfb37b650b7 (diff) |
fix/allow CDATA encoding (#428)
Diffstat (limited to 'lib/Fetcher')
-rwxr-xr-x | lib/Fetcher/FeedFetcher.php | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/lib/Fetcher/FeedFetcher.php b/lib/Fetcher/FeedFetcher.php index 9b4a2f996..fb9da7919 100755 --- a/lib/Fetcher/FeedFetcher.php +++ b/lib/Fetcher/FeedFetcher.php @@ -19,12 +19,14 @@ use FeedIo\Feed\ItemInterface; use FeedIo\FeedInterface; use FeedIo\FeedIo; +use Net_URL2; use OCA\News\Utility\PsrLogger; use OCP\IL10N; use OCA\News\Db\Item; use OCA\News\Db\Feed; use OCA\News\Utility\Time; +use SimpleXMLElement; class FeedFetcher implements IFeedFetcher { @@ -65,10 +67,11 @@ class FeedFetcher implements IFeedFetcher */ public function fetch(string $url, bool $favicon, $lastModified, $user, $password): array { + $url2 = new Net_URL2($url); if (!empty($user) && !empty(trim($user))) { - $url = explode('://', $url); - $url = $url[0] . '://' . urlencode($user) . ':' . urlencode($password) . '@' . $url[1]; + $url2->setUserinfo(urlencode($user), urlencode($password)); } + $url = $url2->getNormalizedURL(); if (is_null($lastModified) || !is_string($lastModified)) { $resource = $this->reader->read($url); } else { @@ -204,6 +207,12 @@ class FeedFetcher implements IFeedFetcher 'HTML-ENTITIES', mb_detect_encoding($body) ); + $data = simplexml_load_string( + '<?xml version="1.0" encoding="utf-8"?><item>' . $body . '</item>', + SimpleXMLElement::class, + LIBXML_NOCDATA + ); + $body = ($data === false) ? $body : (string) $data; $item->setBody($body); if ($parsedItem->hasMedia()) { |