aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Alexandre Alapetite <alexandre@alapetite.fr> 2018-11-12 09:03:20 +0100
committerGravatar GitHub <noreply@github.com> 2018-11-12 09:03:20 +0100
commit0fce9892ff2b03083706b4f78495539861db98aa (patch)
tree615bce6063eb18ca701f46cbdb46836d4a5c8ce3
parentac62742082c3de4629664e506f6cc0fbfd9e09f7 (diff)
API encoding tuning (#2120)
Use only minimal XML->Unicode encoding for articles title. Follow-up of https://github.com/FreshRSS/FreshRSS/pull/2093
-rw-r--r--app/Models/Feed.php2
-rw-r--r--lib/lib_rss.php21
-rw-r--r--p/api/greader.php8
3 files changed, 18 insertions, 13 deletions
diff --git a/app/Models/Feed.php b/app/Models/Feed.php
index a5ef33d6b..acf3bd981 100644
--- a/app/Models/Feed.php
+++ b/app/Models/Feed.php
@@ -424,7 +424,7 @@ class FreshRSS_Feed extends Minz_Model {
$author_names = '';
if (is_array($authors)) {
foreach ($authors as $author) {
- $author_names .= escapeToUnicodeAlternative(strip_tags($author->name == '' ? $author->email : $author->name)) . '; ';
+ $author_names .= escapeToUnicodeAlternative(strip_tags($author->name == '' ? $author->email : $author->name), true) . '; ';
}
}
$author_names = substr($author_names, 0, -2);
diff --git a/lib/lib_rss.php b/lib/lib_rss.php
index 52e4408d2..c445874c8 100644
--- a/lib/lib_rss.php
+++ b/lib/lib_rss.php
@@ -102,16 +102,21 @@ function safe_ascii($text) {
return filter_var($text, FILTER_DEFAULT, FILTER_FLAG_STRIP_LOW | FILTER_FLAG_STRIP_HIGH);
}
-function escapeToUnicodeAlternative($text) {
+function escapeToUnicodeAlternative($text, $extended = true) {
$text = htmlspecialchars_decode($text, ENT_QUOTES);
+
+ //Problematic characters
+ $problem = array('&', '<', '>');
+ //Use their fullwidth Unicode form instead:
+ $replace = array('&', '<', '>');
+
// https://raw.githubusercontent.com/mihaip/google-reader-api/master/wiki/StreamId.wiki
- return trim(str_replace(
- //Problematic characters
- array("'", '"', '^', '<', '>', '?', '&', '\\', '/', ',', ';'),
- //Use their fullwidth Unicode form instead:
- array("’", '"', '^', '<', '>', '?', '&', '\', '/', ',', ';'),
- $text
- ));
+ if ($extended) {
+ $problem += array("'", '"', '^', '?', '\\', '/', ',', ';');
+ $replace += array("’", '"', '^', '?', '\', '/', ',', ';');
+ }
+
+ return trim(str_replace($problem, $replace, $text));
}
/**
diff --git a/p/api/greader.php b/p/api/greader.php
index 7c5c54951..7cd312f2c 100644
--- a/p/api/greader.php
+++ b/p/api/greader.php
@@ -300,7 +300,7 @@ function subscriptionList() {
foreach ($res as $line) {
$subscriptions[] = array(
'id' => 'feed/' . $line['id'],
- 'title' => escapeToUnicodeAlternative($line['name']),
+ 'title' => escapeToUnicodeAlternative($line['name'], true),
'categories' => array(
array(
'id' => 'user/-/label/' . htmlspecialchars_decode($line['c_name'], ENT_QUOTES),
@@ -506,7 +506,7 @@ function entriesToArray($entries) {
'crawlTimeMsec' => substr($entry->id(), 0, -3),
'timestampUsec' => '' . $entry->id(), //EasyRSS
'published' => $entry->date(true),
- 'title' => escapeToUnicodeAlternative($entry->title()),
+ 'title' => escapeToUnicodeAlternative($entry->title(), false),
'summary' => array('content' => $entry->content()),
'alternate' => array(
array('href' => htmlspecialchars_decode($entry->link(), ENT_QUOTES)),
@@ -517,14 +517,14 @@ function entriesToArray($entries) {
),
'origin' => array(
'streamId' => 'feed/' . $f_id,
- 'title' => escapeToUnicodeAlternative($f_name), //EasyRSS
+ 'title' => escapeToUnicodeAlternative($f_name, true), //EasyRSS
//'htmlUrl' => $line['f_website'],
),
);
$author = $entry->authors(true);
$author = trim($author, '; ');
if ($author != '') {
- $item['author'] = escapeToUnicodeAlternative($author);
+ $item['author'] = escapeToUnicodeAlternative($author, false);
}
if ($entry->isRead()) {
$item['categories'][] = 'user/-/state/com.google/read';