diff --git a/api/source/api_modules/classroom_compliance/api_export.d b/api/source/api_modules/classroom_compliance/api_export.d index 116c25b..53da3f2 100644 --- a/api/source/api_modules/classroom_compliance/api_export.d +++ b/api/source/api_modules/classroom_compliance/api_export.d @@ -136,6 +136,18 @@ private struct CSVOutputStream(S) if (isByteOutputStream!S) { } void writeCell(string s) { + import std.string; + import std.regex; + import std.algorithm : canFind, any; + const pattern = ctRegex!`\"`; + if (canFind(s, "\"")) { + s = replaceAll(s, pattern, "\"\""); + } + const escapeableChars = ["\"", ",", ",", "\\", "\n"]; + bool shouldQuote = escapeableChars.any!(c => canFind(s, c)); + if (shouldQuote) { + s = "\"" ~ s ~ "\""; + } writeElement(s); }