From 0946fac11f35465132ad52361a30b8ce7860aead Mon Sep 17 00:00:00 2001 From: Dennis Luxen Date: Tue, 4 Mar 2014 14:54:41 +0100 Subject: [PATCH] Escape characters in JSON instead of HTML-entetizing, implements #895 --- Util/StringUtil.h | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/Util/StringUtil.h b/Util/StringUtil.h index 8ef2a1529..158928820 100644 --- a/Util/StringUtil.h +++ b/Util/StringUtil.h @@ -160,6 +160,47 @@ inline void stringSplit( boost::split(result, s, boost::is_any_of(std::string(&delim))); } +inline std::string EscapeJSONString(const std::string& input) { + std::string output; + output.reserve(input.size()); + for( + std::string::const_iterator iter = input.begin(); + iter != input.end(); + ++iter + ) { + switch (iter[0]) { + case '\\': + output += "\\\\"; + break; + case '"': + output += "\\\""; + break; + case '/': + output += "\\/"; + break; + case '\b': + output += "\\b"; + break; + case '\f': + output += "\\f"; + break; + case '\n': + output += "\\n"; + break; + case '\r': + output += "\\r"; + break; + case '\t': + output += "\\t"; + break; + default: + output += *iter; + break; + } + } + return output; +} + static std::string originals[] = {"&", "\"", "<", ">", "'", "[", "]", "\\"}; static std::string entities[] = {"&", """, "<", ">", "'", "&91;", "&93;", " \" };