Я не могу поверить, что этот вопрос не задавался раньше. У меня есть строка, которая должна быть вставлена в файл HTML, но может содержать специальные символы HTML. Я хочу заменить их соответствующим представлением HTML.
Код ниже работает, но довольно подробный и уродливый. Производительность не имеет решающего значения для моего приложения, но я думаю, что здесь есть проблемы с масштабируемостью. Как я могу улучшить это? Я предполагаю, что это работа для алгоритмов STL или некоторая эзотерическая функция Boost, но приведенный ниже код - лучшее, что я могу придумать сам.
void escape(std::string *data)
{
std::string::size_type pos = 0;
for (;;)
{
pos = data->find_first_of("\"&<>", pos);
if (pos == std::string::npos) break;
std::string replacement;
switch ((*data)[pos])
{
case '\"': replacement = """; break;
case '&': replacement = "&"; break;
case '<': replacement = "<"; break;
case '>': replacement = ">"; break;
default: ;
}
data->replace(pos, 1, replacement);
pos += replacement.size();
};
}