summaryrefslogtreecommitdiff
path: root/app/Http/RequestHandlers/SearchGeneralPage.php
diff options
context:
space:
mode:
authorGreg Roach <greg@subaqua.co.uk>2020-07-25 18:44:31 +0100
committerGreg Roach <greg@subaqua.co.uk>2020-07-25 18:50:14 +0100
commit8b624174ddeb8d345dd62d232ad27b759dbce9ad (patch)
tree2b926a0c1fa528297cadbcad35befc3288d238f7 /app/Http/RequestHandlers/SearchGeneralPage.php
parent5e62dd039078d4a83fc5f8f57ca8c3f85c81fd13 (diff)
downloadwebtrees-8b624174ddeb8d345dd62d232ad27b759dbce9ad.tar.gz
webtrees-8b624174ddeb8d345dd62d232ad27b759dbce9ad.tar.bz2
webtrees-8b624174ddeb8d345dd62d232ad27b759dbce9ad.zip
Fix: #3430 - error parsing search terms
Diffstat (limited to 'app/Http/RequestHandlers/SearchGeneralPage.php')
-rw-r--r--app/Http/RequestHandlers/SearchGeneralPage.php14
1 files changed, 9 insertions, 5 deletions
diff --git a/app/Http/RequestHandlers/SearchGeneralPage.php b/app/Http/RequestHandlers/SearchGeneralPage.php
index 4306cc0018..ed0633dcc2 100644
--- a/app/Http/RequestHandlers/SearchGeneralPage.php
+++ b/app/Http/RequestHandlers/SearchGeneralPage.php
@@ -40,6 +40,8 @@ use function redirect;
use function str_replace;
use function trim;
+use const PREG_SET_ORDER;
+
/**
* Search for genealogy data
*/
@@ -197,18 +199,20 @@ class SearchGeneralPage implements RequestHandlerInterface
$search_terms = [];
// Words in double quotes stay together
- while (preg_match('/"([^"]+)"/', $query, $match)) {
+ preg_match_all('/"([^"]+)"/', $query, $matches, PREG_SET_ORDER);
+ foreach ($matches as $match) {
$search_terms[] = trim($match[1]);
- $query = str_replace($match[0], '', $query);
+ // Remove this string from the search query
+ $query = strtr($query, [$match[0] => '']);
}
// Treat CJK characters as separate words, not as characters.
$query = preg_replace('/\p{Han}/u', '$0 ', $query);
// Other words get treated separately
- while (preg_match('/[\S]+/', $query, $match)) {
- $search_terms[] = trim($match[0]);
- $query = str_replace($match[0], '', $query);
+ preg_match_all('/[\S]+/', $query, $matches, PREG_SET_ORDER);
+ foreach ($matches as $match) {
+ $search_terms[] = $match[0];
}
return $search_terms;