From 1ef331c2707a1cf04183340ad78c067b3fbc4097 Mon Sep 17 00:00:00 2001 From: Christoph Wurst Date: Fri, 21 Jul 2023 16:17:00 +0200 Subject: [PATCH] fix(search): URL-encode all parameters to preserve special characters Signed-off-by: Christoph Wurst --- lib/Service/Search/FilterStringParser.php | 9 +++++---- src/components/SearchMessages.vue | 5 +---- 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/lib/Service/Search/FilterStringParser.php b/lib/Service/Search/FilterStringParser.php index 8f10fa48ef..99b4a1efa0 100644 --- a/lib/Service/Search/FilterStringParser.php +++ b/lib/Service/Search/FilterStringParser.php @@ -25,6 +25,8 @@ namespace OCA\Mail\Service\Search; +use function urldecode; + class FilterStringParser { public function parse(?string $filter): SearchQuery { $query = new SearchQuery(); @@ -49,7 +51,8 @@ private function parseFilterToken(SearchQuery $query, string $token): bool { return false; } - [$type, $param] = explode(':', $token); + [$type, $encodedParam] = explode(':', $token); + $param = urldecode($encodedParam); $type = strtolower($type); $flagMap = [ 'answered' => Flag::is(Flag::ANSWERED), @@ -102,9 +105,7 @@ private function parseFilterToken(SearchQuery $query, string $token): bool { $query->addBcc($param); return true; case 'subject': - // from frontend part subject:My+search+text - $subject = str_replace('+', ' ', $param); - $query->addSubject($subject); + $query->addSubject($param); return true; case 'tags': $tags = explode(',', $param); diff --git a/src/components/SearchMessages.vue b/src/components/SearchMessages.vue index a21cc99d7b..14db019790 100644 --- a/src/components/SearchMessages.vue +++ b/src/components/SearchMessages.vue @@ -378,10 +378,7 @@ export default { let _search = '' Object.entries(this.filterData).filter(([key, val]) => { if (val !== '' && val !== null) { - if (val.indexOf(' ') !== -1) { - val = val.replace(/ /g, '+') - } - _search += `${key}:${val} ` + _search += `${key}:${encodeURI(val)} ` } return val })