summaryrefslogtreecommitdiffstats
path: root/lib/Fetcher
diff options
context:
space:
mode:
authorSean Molenaar <SMillerDev@users.noreply.github.com>2019-03-17 08:23:37 +0100
committerBenjamin Brahmer <info@b-brahmer.de>2019-03-17 08:23:37 +0100
commit2698214c4122d4f5f63f26f7a204035fe0d4f211 (patch)
treee1a033654736cc68f698af7110e8e17fdb0c2e55 /lib/Fetcher
parentf5e25d2edef3360ed7fcdc1ecc663cfb37b650b7 (diff)
fix/allow CDATA encoding (#428)
Diffstat (limited to 'lib/Fetcher')
-rwxr-xr-xlib/Fetcher/FeedFetcher.php13
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()) {