diff options
| author | Greg Roach <greg@subaqua.co.uk> | 2020-07-25 18:44:31 +0100 |
|---|---|---|
| committer | Greg Roach <greg@subaqua.co.uk> | 2020-07-25 18:50:14 +0100 |
| commit | 8b624174ddeb8d345dd62d232ad27b759dbce9ad (patch) | |
| tree | 2b926a0c1fa528297cadbcad35befc3288d238f7 /app/Http/RequestHandlers/SearchGeneralPage.php | |
| parent | 5e62dd039078d4a83fc5f8f57ca8c3f85c81fd13 (diff) | |
| download | webtrees-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.php | 14 |
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; |
