Use a regex to insert a whitespace instead of stripping the tags
authorAlexander Ebert <ebert@woltlab.com>
Thu, 30 Mar 2023 16:18:33 +0000 (18:18 +0200)
committerAlexander Ebert <ebert@woltlab.com>
Thu, 30 Mar 2023 16:18:33 +0000 (18:18 +0200)
wcfsetup/install/files/lib/system/search/SearchIndexManager.class.php

index a9f887422a84f3ecfebe42836e02e77c8e71b491..fc426403067bc920237a339fdeda65b504a52361 100644 (file)
@@ -122,23 +122,9 @@ class SearchIndexManager extends SingletonFactory implements ISearchIndexManager
         $languageID = null,
         $metaData = ''
     ) {
-        // Force replace certain tags with a whitespace to prevent words from adjacent
-        // lines to be glued together.
-        $message = \str_replace([
-            '<br>',
-            '</h1>',
-            '</h2>',
-            '</h3>',
-            '</h4>',
-            '</h5>',
-            '</h6>',
-            '</kbd>',
-            '</li>',
-            '</p>',
-            '</pre>',
-            '</td>',
-            '</woltlab-metacode>',
-        ], ' ', $message);
+        // Inserts a whitespace after certain tags to prevent words from adjacent
+        // lines to be effectively be glued together when the tags are removed.
+        $message = \preg_replace('~(<br>|</(?:h[1-6]|kbd|li|p|pre|td|woltlab-metacode)>)~', '\\1 ', $message);
 
         // strip html; remove whitespace from beginning and end of the message
         $message = StringUtil::trim(StringUtil::stripHTML($message));