diff --git a/src/string_utils.cpp b/src/string_utils.cpp
index 3e9cbe07051d9b9af2945a7b61713206cfd581cc..adadbae1638d25aa777bcf7347f9dfc0199a24a3 100644
--- a/src/string_utils.cpp
+++ b/src/string_utils.cpp
@@ -121,4 +121,13 @@ split_string_to_unsigned(const std::string &s, char delim)
     return result;
 }
 
+void string_replace(std::string& str, const std::string& from, const std::string& to)
+{
+    size_t start_pos = 0;
+    while ((start_pos = str.find(from, start_pos)) != std::string::npos) {
+        str.replace(start_pos, from.length(), to);
+        start_pos += to.length(); // Handles case where 'to' is a substring of 'from'
+    }
+}
+
 } // namespace jami
diff --git a/src/string_utils.h b/src/string_utils.h
index f5c69cc5a76c5d2cb4335677a7c092249db36e45..3f0e85fc9b2956f717332e09cfd35e9e9db8a203 100644
--- a/src/string_utils.h
+++ b/src/string_utils.h
@@ -19,8 +19,7 @@
  *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA.
  */
 
-#ifndef STRING_UTILS_H
-#define STRING_UTILS_H
+#pragma once
 
 #include <string>
 #include <vector>
@@ -67,6 +66,6 @@ split_string(const std::string& s, char sep);
 std::vector<unsigned>
 split_string_to_unsigned(const std::string& s, char sep);
 
-} // namespace jami
+void string_replace(std::string& str, const std::string& from, const std::string& to);
 
-#endif
+} // namespace jami