Fix escaping of tag search (#7468)

* Fix escaping of tag search
fix https://github.com/FreshRSS/FreshRSS/issues/7466

* Minor clarity
This commit is contained in:
Alexandre Alapetite authored and GitHub committed 2025-04-01 09:39:16 +02:00
1 parent 426e3054c2
commit d81dbc44b8
3 files changed
+16 -6

No files matched your search

+5
View File
@@ -204,4 +204,9 @@ class FreshRSS_tag_Controller extends FreshRSS_ActionController {
$tagDAO = FreshRSS_Factory::createTagDao();
$this->view->tags = $tagDAO->listTags(precounts: true);
}
public static function escapeForSearch(string $tag): string {
$tag = htmlspecialchars_decode($tag, ENT_QUOTES);
return str_replace([' ', '(', ')'], ['+', '\\(', '\\)'], $tag);
}
}
@@ -56,7 +56,8 @@
<li class="dropdown-header"><?= _t('index.tag.related') ?></li>
<?php
foreach ($tags as $tag) {
?><li class="item"><a href="<?= _url('index', 'index', 'search', '#' . str_replace(' ', '+', htmlspecialchars_decode($tag, ENT_QUOTES))) ?>"><?= $tag ?></a></li><?php
?><li class="item"><a href="<?= _url('index', 'index', 'search', '#' .
FreshRSS_tag_Controller::escapeForSearch($tag)) ?>"><?= $tag ?></a></li><?php
} ?>
</ul>
<a class="dropdown-close" href="#close">❌</a>
+9 -5
View File
@@ -11,11 +11,13 @@
<?= _i('tag') ?><ul class="list-tags">
<?php if (Minz_Request::controllerName() === 'index'): ?>
<?php foreach ($firstTags as $tag): ?>
<li class="item tag"><a class="link-tag" href="<?= _url('index', 'index', 'search', '#' . str_replace(' ', '+', htmlspecialchars_decode($tag, ENT_QUOTES))) ?>" title="<?= _t('gen.action.filter') ?>">#<?= $tag ?></a></li>
<li class="item tag"><a class="link-tag" href="<?= _url('index', 'index', 'search', '#' .
FreshRSS_tag_Controller::escapeForSearch($tag)) ?>" title="<?= _t('gen.action.filter') ?>">#<?= $tag ?></a></li>
<?php endforeach; ?>
<?php else: // API public access ?>
<?php foreach ($firstTags as $tag): ?>
<li class="item tag"><a class="link-tag" href="<?= $this->html_url . '&search=%23' . str_replace(' ', '+', htmlspecialchars_decode($tag, ENT_QUOTES)) ?>" title="<?= _t('gen.action.filter') ?>">#<?= $tag ?></a></li>
<li class="item tag"><a class="link-tag" href="<?= $this->html_url . '&search=' .
urlencode('#' . FreshRSS_tag_Controller::escapeForSearch($tag)) ?>" title="<?= _t('gen.action.filter') ?>">#<?= $tag ?></a></li>
<?php endforeach; ?>
<?php endif; ?>
@@ -29,11 +31,13 @@
<li class="dropdown-header"><?= _t('index.tag.related') ?></li>
<?php if (Minz_Request::controllerName() === 'index'): ?>
<?php foreach ($remainingTags as $tag): ?>
<li class="item"><a href="<?= _url('index', 'index', 'search', '#' . str_replace(' ', '+', htmlspecialchars_decode($tag, ENT_QUOTES))) ?>" title="<?= _t('gen.action.filter') ?>">#<?= $tag ?></a></li>
<li class="item"><a href="<?= _url('index', 'index', 'search', '#' .
FreshRSS_tag_Controller::escapeForSearch($tag)) ?>" title="<?= _t('gen.action.filter') ?>">#<?= $tag ?></a></li>
<?php endforeach; ?>
<?php else: ?>
<?php else: // API public access ?>
<?php foreach ($remainingTags as $tag): ?>
<li class="item tag"><a class="link-tag" href="<?= $this->html_url . '&search=%23' . str_replace(' ', '+', htmlspecialchars_decode($tag, ENT_QUOTES)) ?>" title="<?= _t('gen.action.filter') ?>">#<?= $tag ?></a></li>
<li class="item tag"><a class="link-tag" href="<?= $this->html_url . '&search=' .
urlencode('#' . FreshRSS_tag_Controller::escapeForSearch($tag)) ?>" title="<?= _t('gen.action.filter') ?>">#<?= $tag ?></a></li>
<?php endforeach; ?>
<?php endif; ?>
</ul>