From 11767746e04e4c6a0c9748c2dac7d5ae63b7686a Mon Sep 17 00:00:00 2001 From: Alexander Ebert Date: Tue, 9 Sep 2014 13:28:50 +0200 Subject: [PATCH] Removing special characters from search strings --- .../search/AbstractSearchEngine.class.php | 17 +++++++++++++++++ .../lib/system/search/ISearchEngine.class.php | 7 +++++++ .../lib/system/search/SearchEngine.class.php | 7 +++++++ .../search/mysql/MysqlSearchEngine.class.php | 5 +++++ 4 files changed, 36 insertions(+) diff --git a/wcfsetup/install/files/lib/system/search/AbstractSearchEngine.class.php b/wcfsetup/install/files/lib/system/search/AbstractSearchEngine.class.php index 214e2546c1..348c258626 100644 --- a/wcfsetup/install/files/lib/system/search/AbstractSearchEngine.class.php +++ b/wcfsetup/install/files/lib/system/search/AbstractSearchEngine.class.php @@ -21,6 +21,12 @@ abstract class AbstractSearchEngine extends SingletonFactory implements ISearchE */ protected $conditionBuilderClassName = 'wcf\system\database\util\PreparedStatementConditionBuilder'; + /** + * list of engine-specific special characters + * @var array + */ + protected $specialCharacters = array(); + /** * @see \wcf\system\search\ISearchEngine::getConditionBuilderClassName() */ @@ -123,4 +129,15 @@ abstract class AbstractSearchEngine extends SingletonFactory implements ISearchE * @return integer */ abstract protected function getFulltextMinimumWordLength(); + + /** + * @see \wcf\system\search\ISearchEngine::removeSpecialCharacters() + */ + public function removeSpecialCharacters($string) { + if (!empty($this->specialCharacters)) { + return str_replace($this->specialCharacters, '', $string); + } + + return $string; + } } diff --git a/wcfsetup/install/files/lib/system/search/ISearchEngine.class.php b/wcfsetup/install/files/lib/system/search/ISearchEngine.class.php index 5dfbbf48ba..18e33c7923 100644 --- a/wcfsetup/install/files/lib/system/search/ISearchEngine.class.php +++ b/wcfsetup/install/files/lib/system/search/ISearchEngine.class.php @@ -39,6 +39,13 @@ interface ISearchEngine { */ public function getInnerJoin($objectTypeName, $q, $subjectOnly = false, PreparedStatementConditionBuilder $searchIndexCondition = null, $orderBy = 'time DESC', $limit = 1000); + /** + * Removes engine-specific special characters from a string. + * + * @param string $string + */ + public function removeSpecialCharacters($string); + /** * Searches for the given string and returns the data of the found messages. * diff --git a/wcfsetup/install/files/lib/system/search/SearchEngine.class.php b/wcfsetup/install/files/lib/system/search/SearchEngine.class.php index 2405166b10..7696d996e6 100644 --- a/wcfsetup/install/files/lib/system/search/SearchEngine.class.php +++ b/wcfsetup/install/files/lib/system/search/SearchEngine.class.php @@ -115,4 +115,11 @@ class SearchEngine extends SingletonFactory implements ISearchEngine { public function getConditionBuilderClassName() { return $this->getSearchEngine()->getConditionBuilderClassName(); } + + /** + * @see \wcf\system\search\ISearchEngine::removeSpecialCharacters() + */ + public function removeSpecialCharacters($string) { + return $this->getSearchEngine()->removeSpecialCharacters($string); + } } diff --git a/wcfsetup/install/files/lib/system/search/mysql/MysqlSearchEngine.class.php b/wcfsetup/install/files/lib/system/search/mysql/MysqlSearchEngine.class.php index a8d4274d17..a8371e51f7 100644 --- a/wcfsetup/install/files/lib/system/search/mysql/MysqlSearchEngine.class.php +++ b/wcfsetup/install/files/lib/system/search/mysql/MysqlSearchEngine.class.php @@ -25,6 +25,11 @@ class MysqlSearchEngine extends AbstractSearchEngine { */ protected $ftMinWordLen = null; + /** + * @see \wcf\system\search\AbstractSearchEngine::$specialCharacters + */ + protected $specialCharacters = array('(', ')', '@', '+', '-', '"', '<', '>', '~', '*'); + /** * @see \wcf\system\search\ISearchEngine::search() */ -- 2.20.1