diff --git a/common/test/pldm_utils_test.cpp b/common/test/pldm_utils_test.cpp
index 006d065..0014bb5 100644
--- a/common/test/pldm_utils_test.cpp
+++ b/common/test/pldm_utils_test.cpp
@@ -930,4 +930,39 @@
     buffer.length = bufferArr2.size();
     auto returnStr3 = toString(buffer);
     EXPECT_EQ(returnStr3, str3);
+}
+
+TEST(Split, allTestCases)
+{
+    std::string s1 = "aa,bb,cc,dd";
+    auto results1 = split(s1, ",");
+    EXPECT_EQ(results1[0], "aa");
+    EXPECT_EQ(results1[1], "bb");
+    EXPECT_EQ(results1[2], "cc");
+    EXPECT_EQ(results1[3], "dd");
+
+    std::string s2 = "aa||bb||cc||dd";
+    auto results2 = split(s2, "||");
+    EXPECT_EQ(results2[0], "aa");
+    EXPECT_EQ(results2[1], "bb");
+    EXPECT_EQ(results2[2], "cc");
+    EXPECT_EQ(results2[3], "dd");
+
+    std::string s3 = " aa || bb||cc|| dd";
+    auto results3 = split(s3, "||", " ");
+    EXPECT_EQ(results3[0], "aa");
+    EXPECT_EQ(results3[1], "bb");
+    EXPECT_EQ(results3[2], "cc");
+    EXPECT_EQ(results3[3], "dd");
+
+    std::string s4 = "aa\\\\bb\\cc\\dd";
+    auto results4 = split(s4, "\\");
+    EXPECT_EQ(results4[0], "aa");
+    EXPECT_EQ(results4[1], "bb");
+    EXPECT_EQ(results4[2], "cc");
+    EXPECT_EQ(results4[3], "dd");
+
+    std::string s5 = "aa\\";
+    auto results5 = split(s5, "\\");
+    EXPECT_EQ(results5[0], "aa");
 }
\ No newline at end of file
diff --git a/common/utils.cpp b/common/utils.cpp
index 89b55d1..ac19896 100644
--- a/common/utils.cpp
+++ b/common/utils.cpp
@@ -541,5 +541,32 @@
     return str;
 }
 
+std::vector<std::string> split(std::string_view srcStr, std::string_view delim,
+                               std::string_view trimStr)
+{
+    std::vector<std::string> out;
+    size_t start;
+    size_t end = 0;
+
+    while ((start = srcStr.find_first_not_of(delim, end)) != std::string::npos)
+    {
+        end = srcStr.find(delim, start);
+        std::string_view dstStr = srcStr.substr(start, end - start);
+        if (!trimStr.empty())
+        {
+            dstStr.remove_prefix(dstStr.find_first_not_of(trimStr));
+            dstStr.remove_suffix(dstStr.size() - 1 -
+                                 dstStr.find_last_not_of(trimStr));
+        }
+
+        if (!dstStr.empty())
+        {
+            out.push_back(std::string(dstStr));
+        }
+    }
+
+    return out;
+}
+
 } // namespace utils
 } // namespace pldm
diff --git a/common/utils.hpp b/common/utils.hpp
index c7c63ef..464816a 100644
--- a/common/utils.hpp
+++ b/common/utils.hpp
@@ -389,5 +389,19 @@
  */
 std::string toString(const struct variable_field& var);
 
+/** @brief Split strings according to special identifiers
+ *
+ *  We can split the string according to the custom identifier(';', ',', '&' or
+ *  others) and store it to vector.
+ *
+ *  @param[in] srcStr       - The string to be split
+ *  @param[in] delim        - The custom identifier
+ *  @param[in] trimStr      - The first and last string to be trimmed
+ *
+ *  @return std::vector<std::string> Vectors are used to store strings
+ */
+std::vector<std::string> split(std::string_view srcStr, std::string_view delim,
+                               std::string_view trimStr = "");
+
 } // namespace utils
 } // namespace pldm
