From f9ca1b18a4e2a35d51569bd995d89d40a30a8b30 Mon Sep 17 00:00:00 2001 From: wmayer Date: Thu, 3 Oct 2019 01:43:08 +0200 Subject: [PATCH] add function to escape special characters in strings --- src/Base/Tools.cpp | 36 ++++++++++++++++++++++++++++++++++++ src/Base/Tools.h | 2 ++ 2 files changed, 38 insertions(+) diff --git a/src/Base/Tools.cpp b/src/Base/Tools.cpp index 3c0bfcca1b..4536303e93 100644 --- a/src/Base/Tools.cpp +++ b/src/Base/Tools.cpp @@ -192,6 +192,42 @@ std::string Base::Tools::escapedUnicodeToUtf8(const std::string& s) return string; } +QString Base::Tools::escapeEncodeString(const QString& s) +{ + QString result; + const int len = s.length(); + result.reserve(int(len * 1.1)); + for (int i = 0; i < len; ++i) { + if (s.at(i) == QLatin1Char('\\')) + result += QLatin1String("\\\\"); + else if (s.at(i) == QLatin1Char('\"')) + result += QLatin1String("\\\""); + else if (s.at(i) == QLatin1Char('\'')) + result += QLatin1String("\\\'"); + else + result += s.at(i); + } + result.squeeze(); + return result; +} + +std::string Base::Tools::escapeEncodeString(const std::string& s) +{ + std::string result; + size_t len = s.size(); + for (size_t i = 0; i < len; ++i) { + if (s.at(i) == '\\') + result += "\\\\"; + else if (s.at(i) == '\"') + result += "\\\""; + else if (s.at(i) == '\'') + result += "\\\'"; + else + result += s.at(i); + } + return result; +} + QString Base::Tools::escapeEncodeFilename(const QString& s) { QString result; diff --git a/src/Base/Tools.h b/src/Base/Tools.h index 96ebdc1439..7b0826bcc8 100644 --- a/src/Base/Tools.h +++ b/src/Base/Tools.h @@ -285,6 +285,8 @@ struct BaseExport Tools static std::string escapedUnicodeFromUtf8(const char *s); static std::string escapedUnicodeToUtf8(const std::string& s); + static QString escapeEncodeString(const QString& s); + static std::string escapeEncodeString(const std::string& s); static QString escapeEncodeFilename(const QString& s); static std::string escapeEncodeFilename(const std::string& s);