diff --git a/templates/lib/outputstream.cpp b/templates/lib/outputstream.cpp index 0f1b354f..f3ded01c 100644 --- a/templates/lib/outputstream.cpp +++ b/templates/lib/outputstream.cpp @@ -32,13 +32,28 @@ OutputStream::~OutputStream() {} QString OutputStream::escape(const QString &input) const { - auto temp = input; - temp.replace(QLatin1Char('&'), QStringLiteral("&")); - temp.replace(QLatin1Char('<'), QStringLiteral("<")); - temp.replace(QLatin1Char('>'), QStringLiteral(">")); - temp.replace(QLatin1Char('\''), QStringLiteral("'")); - temp.replace(QLatin1Char('"'), QStringLiteral(""")); - return temp; + // This could be replaced by QString::toHtmlEscaped() + // but atm it does not escape single quotes + QString rich; + const int len = input.length(); + rich.reserve(int(len * 1.1)); + for (int i = 0; i < len; ++i) { + const QChar ch = input.at(i); + if (ch == QLatin1Char('<')) + rich += QLatin1String("<"); + else if (ch == QLatin1Char('>')) + rich += QLatin1String(">"); + else if (ch == QLatin1Char('&')) + rich += QLatin1String("&"); + else if (ch == QLatin1Char('"')) + rich += QLatin1String("""); + else if (ch == QLatin1Char('\'')) + rich += QLatin1String("'"); + else + rich += ch; + } + rich.squeeze(); + return rich; } QString OutputStream::escape(const Grantlee::SafeString &input) const