diff --git a/library/filter.php b/library/filter.php index cb3b545..ead4209 100644 --- a/library/filter.php +++ b/library/filter.php @@ -55,6 +55,15 @@ class Filter { return $data; } + static public function sphinxSearchQuery(string $query) { + + $query = str_replace(['\\', '/', '~', '@', '!'], ['\\\'', '\/', '\~', '\@', '\!'], $query); + + $query = trim($query); + + return $query; + } + static public function plural(int $number, array $texts) { $cases = array (2, 0, 1, 1, 1, 2); diff --git a/public/api.php b/public/api.php index 6954945..11c6548 100644 --- a/public/api.php +++ b/public/api.php @@ -34,8 +34,8 @@ if (API_ENABLED) { $page = !empty($_GET['page']) ? Filter::url($_GET['page']) : 1; // Make search request - $sphinxResultsTotal = $sphinx->searchHostPagesTotal($query); - $sphinxResults = $sphinx->searchHostPages($query, $page * API_SEARCH_PAGINATION_RESULTS_LIMIT - API_SEARCH_PAGINATION_RESULTS_LIMIT, API_SEARCH_PAGINATION_RESULTS_LIMIT, $sphinxResultsTotal); + $sphinxResultsTotal = $sphinx->searchHostPagesTotal(Filter::sphinxSearchQuery($query)); + $sphinxResults = $sphinx->searchHostPages(Filter::sphinxSearchQuery($query), $page * API_SEARCH_PAGINATION_RESULTS_LIMIT - API_SEARCH_PAGINATION_RESULTS_LIMIT, API_SEARCH_PAGINATION_RESULTS_LIMIT, $sphinxResultsTotal); // Generate results $dbResults = []; diff --git a/public/search.php b/public/search.php index 20cdfd6..dbf1f45 100644 --- a/public/search.php +++ b/public/search.php @@ -106,8 +106,8 @@ if (filter_var($q, FILTER_VALIDATE_URL) && preg_match(CRAWL_URL_REGEXP, $q)) { // Search request if (!empty($q)) { - $resultsTotal = $sphinx->searchHostPagesTotal($q); - $results = $sphinx->searchHostPages($q, $p * WEBSITE_PAGINATION_SEARCH_RESULTS_LIMIT - WEBSITE_PAGINATION_SEARCH_RESULTS_LIMIT, WEBSITE_PAGINATION_SEARCH_RESULTS_LIMIT, $resultsTotal); + $resultsTotal = $sphinx->searchHostPagesTotal(Filter::sphinxSearchQuery($q)); + $results = $sphinx->searchHostPages(Filter::sphinxSearchQuery($q), $p * WEBSITE_PAGINATION_SEARCH_RESULTS_LIMIT - WEBSITE_PAGINATION_SEARCH_RESULTS_LIMIT, WEBSITE_PAGINATION_SEARCH_RESULTS_LIMIT, $resultsTotal); } else {