diff --git a/phpBB/includes/functions_content.php b/phpBB/includes/functions_content.php index 4a8420d0a3..bb2ac3e8a7 100644 --- a/phpBB/includes/functions_content.php +++ b/phpBB/includes/functions_content.php @@ -419,7 +419,7 @@ function get_context(string $text, array $words, int $length = 400): string $output[] = utf8_substr($fragment, $fragment_start, $fragment_end - $fragment_start + 1); } - return htmlentities(implode(' ... ', $output)) . ($end < $text_length - 1 ? ' ...' : ''); + return ($fragments[0][0] != 0 ? '... ' : '') . htmlentities(implode(' ... ', $output)) . ($end < $text_length - 1 ? ' ...' : ''); } /** diff --git a/tests/functions_content/get_context_test.php b/tests/functions_content/get_context_test.php index 4da1be8ed1..cce72c6652 100644 --- a/tests/functions_content/get_context_test.php +++ b/tests/functions_content/get_context_test.php @@ -89,6 +89,24 @@ class phpbb_functions_content_get_context_test extends TestCase 'length' => -10, 'expected' => '...', ], + 'ellipses_beginning' => [ + 'text' => 'foo foo foo foo foo foo foo foo bar', + 'words' => ['bar'], + 'length' => 10, + 'expected' => '... foo foo bar', + ], + 'ellipsis_end' => [ + 'text' => 'bar foo foo foo foo foo foo foo foo', + 'words' => ['bar'], + 'length' => 10, + 'expected' => 'bar foo foo ...', + ], + 'ellipsis_middle' => [ + 'text' => 'foo word1 foo foo foo foo foo foo foo foo foo word2 foo', + 'words' => ['word1', 'word2'], + 'length' => 10, + 'expected' => '... word1 ... word2 ...', + ], ]; } @@ -99,4 +117,5 @@ class phpbb_functions_content_get_context_test extends TestCase { $this->assertEquals($expected, get_context($text, $words, $length)); } + }