+ std::string Sanitize(const std::string &str)
+ {
+ std::string ret;
+ ret.reserve(str.length() * 2);
+
+ for (std::string::const_iterator x = str.begin(); x != str.end(); ++x)
+ {
+ std::map<char, char const*>::const_iterator it = entities.find(*x);
+
+ if (it != entities.end())
+ {
+ ret += '&';
+ ret += it->second;
+ ret += ';';
+ }
+ else if (*x < 32 || *x > 126)
+ {
+ int n = (unsigned char)*x;
+ ret += ("&#" + ConvToStr(n) + ";");
+ }
+ else
+ {
+ ret += *x;
+ }
+ }
+ return ret;
+ }
+