diff options
author | Oliver Schramm <oliver.schramm97@gmail.com> | 2014-04-13 21:15:14 +0200 |
---|---|---|
committer | Oliver Schramm <oliver.schramm97@gmail.com> | 2014-04-13 21:15:14 +0200 |
commit | face175471b5064117ca57ece53a3403e51e20ba (patch) | |
tree | a0954756c4e4c1d56f96e9a0cb3ee52e5ae5a4ce /phpBB | |
parent | 02378e94e779bbd407ef86166884c00e32d152fc (diff) | |
download | forums-face175471b5064117ca57ece53a3403e51e20ba.tar forums-face175471b5064117ca57ece53a3403e51e20ba.tar.gz forums-face175471b5064117ca57ece53a3403e51e20ba.tar.bz2 forums-face175471b5064117ca57ece53a3403e51e20ba.tar.xz forums-face175471b5064117ca57ece53a3403e51e20ba.zip |
[ticket/10423] Move code into a function and add tests for it
PHPBB3-10423
Diffstat (limited to 'phpBB')
-rw-r--r-- | phpBB/includes/functions_content.php | 18 | ||||
-rw-r--r-- | phpBB/search.php | 8 | ||||
-rw-r--r-- | phpBB/viewtopic.php | 2 |
3 files changed, 23 insertions, 5 deletions
diff --git a/phpBB/includes/functions_content.php b/phpBB/includes/functions_content.php index 6213d2fd24..69a29dc31b 100644 --- a/phpBB/includes/functions_content.php +++ b/phpBB/includes/functions_content.php @@ -21,6 +21,7 @@ if (!defined('IN_PHPBB')) * make_jumpbox() * bump_topic_allowed() * get_context() +* phpbb_clean_search_string() * decode_message() * strip_bbcode() * generate_text_for_display() @@ -361,6 +362,23 @@ function get_context($text, $words, $length = 400) } /** +* Cleans a search string by removing single wildcards from it and replacing multiple spaces with a single one. +* +* @param string $search_string The full search string which should be cleaned. +* +* @return string The cleaned search string without any wildcards and multiple spaces. +*/ +function phpbb_clean_search_string($search_string) +{ + // This regular expressions matches every single wildcard. + // That means one after a whitespace or the beginning of the string or one before a whitespace or the end of the string. + $search_string = preg_replace('#(?<=^|\s)\*(?=\s|$)#', '', $search_string); + $search_string = trim($search_string); + $search_string = preg_replace('#\s+#u', ' ', $search_string); + return $search_string; +} + +/** * Decode text whereby text is coming from the db and expected to be pre-parsed content * We are placing this outside of the message parser because we are often in need of it... */ diff --git a/phpBB/search.php b/phpBB/search.php index 43eb42514e..d0d86fac17 100644 --- a/phpBB/search.php +++ b/phpBB/search.php @@ -574,9 +574,9 @@ if ($keywords || $author || $author_id || $search_id || $submit) } // define some vars for urls - // A single wildcard will destroy the search query - $hilit = trim(preg_replace('#(?<=^|\s)\*(?=\s|$)#', '', str_replace(array('+', '-', '|', '(', ')', '"'), ' ', $keywords))); - $hilit = implode('|', explode(' ', preg_replace('#\s+#u', ' ', $hilit))); + // A single wildcard will make the search results look ugly + $hilit = phpbb_clean_search_string(str_replace(array('+', '-', '|', '(', ')', '"'), ' ', $keywords)); + $hilit = str_replace(' ', '|', $hilit); $u_hilit = urlencode(htmlspecialchars_decode(str_replace('|', ' ', $hilit))); $u_show_results = '&sr=' . $show_results; @@ -840,7 +840,7 @@ if ($keywords || $author || $author_id || $search_id || $submit) $hilit_array = array_filter(explode('|', $hilit), 'strlen'); foreach ($hilit_array as $key => $value) { - $hilit_array[$key] = preg_replace('#\s+#u', ' ', trim(preg_replace('#(?<=^|\s)\*(?=\s|$)#', '', $value))); + $hilit_array[$key] = phpbb_clean_search_string($value); $hilit_array[$key] = str_replace('\*', '\w*?', preg_quote($hilit_array[$key], '#')); $hilit_array[$key] = preg_replace('#(^|\s)\\\\w\*\?(\s|$)#', '$1\w+?$2', $hilit_array[$key]); } diff --git a/phpBB/viewtopic.php b/phpBB/viewtopic.php index 4c9302dbbe..31bc1d2701 100644 --- a/phpBB/viewtopic.php +++ b/phpBB/viewtopic.php @@ -475,7 +475,7 @@ if ($hilit_words) { if (trim($word)) { - $word = preg_replace('#\s+#u', ' ', trim(preg_replace('#(?<=^|\s)\*(?=\s|$)#', '', $word))); + $word = phpbb_clean_search_string($word); $word = str_replace('\*', '\w+?', preg_quote($word, '#')); $word = preg_replace('#(^|\s)\\\\w\*\?(\s|$)#', '$1\w+?$2', $word); $highlight_match .= (($highlight_match != '' && $word != '') ? '|' : '') . $word; |