diff --git a/es-app/src/CollectionSystemsManager.cpp b/es-app/src/CollectionSystemsManager.cpp
index b804698a7..df2ed075e 100644
--- a/es-app/src/CollectionSystemsManager.cpp
+++ b/es-app/src/CollectionSystemsManager.cpp
@@ -555,13 +555,7 @@ std::string CollectionSystemsManager::getValidNewCollectionName(std::string inNa
     std::string name = inName;
 
     // Trim leading and trailing whitespaces.
-    name.erase(name.begin(), std::find_if(name.begin(), name.end(), [](char c) {
-                   return !std::isspace(static_cast<unsigned char>(c));
-               }));
-    name.erase(std::find_if(name.rbegin(), name.rend(),
-                            [](char c) { return !std::isspace(static_cast<unsigned char>(c)); })
-                   .base(),
-               name.end());
+    name = Utils::String::trim(name);
 
     if (index == 0) {
         size_t remove = std::string::npos;
diff --git a/es-app/src/guis/GuiScraperSearch.cpp b/es-app/src/guis/GuiScraperSearch.cpp
index d749c1302..cb3ed5ba7 100644
--- a/es-app/src/guis/GuiScraperSearch.cpp
+++ b/es-app/src/guis/GuiScraperSearch.cpp
@@ -794,14 +794,7 @@ void GuiScraperSearch::openInputScreen(ScraperSearchParams& params)
 {
     auto searchForFunc = [&](std::string name) {
         // Trim leading and trailing whitespaces.
-        name.erase(name.begin(), std::find_if(name.begin(), name.end(), [](char c) {
-                       return !std::isspace(static_cast<unsigned char>(c));
-                   }));
-        name.erase(std::find_if(name.rbegin(), name.rend(),
-                                [](char c) { return !std::isspace(static_cast<unsigned char>(c)); })
-                       .base(),
-                   name.end());
-
+        name = Utils::String::trim(name);
         stop();
         mRefinedSearch = true;
         params.nameOverride = name;
diff --git a/es-app/src/scrapers/GamesDBJSONScraper.cpp b/es-app/src/scrapers/GamesDBJSONScraper.cpp
index 4c015d38c..327bbef30 100644
--- a/es-app/src/scrapers/GamesDBJSONScraper.cpp
+++ b/es-app/src/scrapers/GamesDBJSONScraper.cpp
@@ -160,15 +160,7 @@ void thegamesdb_generate_json_scraper_requests(
         }
 
         // Trim leading and trailing whitespaces.
-        cleanName.erase(cleanName.begin(),
-                        std::find_if(cleanName.begin(), cleanName.end(), [](char c) {
-                            return !std::isspace(static_cast<unsigned char>(c));
-                        }));
-        cleanName.erase(
-            std::find_if(cleanName.rbegin(), cleanName.rend(),
-                         [](char c) { return !std::isspace(static_cast<unsigned char>(c)); })
-                .base(),
-            cleanName.end());
+        cleanName = Utils::String::trim(cleanName);
 
         path += "/Games/ByGameName?" + apiKey +
                 "&fields=players,publishers,genres,overview,last_updated,rating,"
diff --git a/es-app/src/scrapers/ScreenScraper.cpp b/es-app/src/scrapers/ScreenScraper.cpp
index afdb9ea00..ea4cb1cab 100644
--- a/es-app/src/scrapers/ScreenScraper.cpp
+++ b/es-app/src/scrapers/ScreenScraper.cpp
@@ -553,15 +553,7 @@ std::string ScreenScraperRequest::ScreenScraperConfig::getGameSearchUrl(
     bool singleSearch = false;
 
     // Trim leading and trailing whitespaces.
-    searchName.erase(searchName.begin(),
-                     std::find_if(searchName.begin(), searchName.end(), [](char c) {
-                         return !std::isspace(static_cast<unsigned char>(c));
-                     }));
-    searchName.erase(
-        std::find_if(searchName.rbegin(), searchName.rend(),
-                     [](char c) { return !std::isspace(static_cast<unsigned char>(c)); })
-            .base(),
-        searchName.end());
+    searchName = Utils::String::trim(searchName);
 
     // If only whitespaces were entered as the search string, then search using a random string
     // that will not return any results. This is a quick and dirty way to avoid french error
diff --git a/es-core/src/utils/StringUtil.cpp b/es-core/src/utils/StringUtil.cpp
index 2bc8798ac..2a7adb093 100644
--- a/es-core/src/utils/StringUtil.cpp
+++ b/es-core/src/utils/StringUtil.cpp
@@ -564,13 +564,20 @@ namespace Utils
 
         std::string trim(const std::string& stringArg)
         {
-            const size_t strBegin = stringArg.find_first_not_of(" \t");
-            const size_t strEnd = stringArg.find_last_not_of(" \t");
+            std::string trimString = stringArg;
 
-            if (strBegin == std::string::npos)
-                return "";
+            // Trim leading and trailing whitespaces.
+            trimString.erase(trimString.begin(),
+                             std::find_if(trimString.begin(), trimString.end(), [](char c) {
+                                 return !std::isspace(static_cast<unsigned char>(c));
+                             }));
+            trimString.erase(
+                std::find_if(trimString.rbegin(), trimString.rend(),
+                             [](char c) { return !std::isspace(static_cast<unsigned char>(c)); })
+                    .base(),
+                trimString.end());
 
-            return stringArg.substr(strBegin, strEnd - strBegin + 1);
+            return trimString;
         }
 
         std::string replace(const std::string& stringArg,