aboutsummaryrefslogtreecommitdiffstats
path: root/phpBB
diff options
context:
space:
mode:
authorOliver Schramm <oliver.schramm97@gmail.com>2014-04-13 21:15:14 +0200
committerOliver Schramm <oliver.schramm97@gmail.com>2014-04-13 21:15:14 +0200
commitface175471b5064117ca57ece53a3403e51e20ba (patch)
treea0954756c4e4c1d56f96e9a0cb3ee52e5ae5a4ce /phpBB
parent02378e94e779bbd407ef86166884c00e32d152fc (diff)
downloadforums-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.php18
-rw-r--r--phpBB/search.php8
-rw-r--r--phpBB/viewtopic.php2
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('+', '-', '|', '(', ')', '&quot;'), ' ', $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('+', '-', '|', '(', ')', '&quot;'), ' ', $keywords));
+ $hilit = str_replace(' ', '|', $hilit);
$u_hilit = urlencode(htmlspecialchars_decode(str_replace('|', ' ', $hilit)));
$u_show_results = '&amp;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;