Java escape HTML

в настоящее время я использую org.apache.commons.lang.StringEscapeUtils escapeHtml(), чтобы избежать нежелательных HTML-тегов в моих строках, но затем я понял, что он также избегает символов с акцентами на &something;,, чего я не хочу.

Знаете ли вы какое-либо решение для экранирования HTML-тегов, но оставляете мои специальные (ну, для некоторых людей, они здесь нормальные), буквы такие как?

Спасибо заранее!

Болаж

Ответ 1

StringUtils.replaceEach(str, new String[]{"&", "\"", "<", ">"}, new String[]{"&amp;", "&quot;", "&lt;", "&gt;"})

Ответ 2

Если это для Android, используйте TextUtils.htmlEncode(String) вместо этого.

Ответ 4

Здесь версия, которая заменяет шесть значащих символов, как рекомендовано OWASP. Это подходит для элементов содержимого HTML, таких как <textarea>...</textarea>, но не атрибутов HTML, таких как <input value="...">, потому что последние часто остаются без кавычек.

StringUtils.replaceEach(text,
        new String[]{"&", "<", ">", "\"", "'", "/"},
        new String[]{"&amp;", "&lt;", "&gt;", "&quot;", "&#x27;", "&#x2F;"});

Ответ 5

Если вы используете Wicket, используйте:

import org.apache.wicket.util.string.Strings;
...
CharSequence cs = Strings.escapeMarkup(src);
String str =      Strings.escapeMarkup(src).toString();

Ответ 6

Я знаю, что слишком поздно добавлять комментарий, но, возможно, следующий код будет полезен:

public static String escapeHtml(String string) {
    StringBuilder escapedTxt = new StringBuilder();
    for (int i = 0; i < string.length(); i++) {
        char tmp = string.charAt(i);
        switch (tmp) {
        case '<':
            escapedTxt.append("&lt;");
            break;
        case '>':
            escapedTxt.append("&gt;");
            break;
        case '&':
            escapedTxt.append("&amp;");
            break;
        case '"':
            escapedTxt.append("&quot;");
            break;
        case '\'':
            escapedTxt.append("&#x27;");
            break;
        case '/':
            escapedTxt.append("&#x2F;");
            break;
        default:
            escapedTxt.append(tmp);
        }
    }
    return escapedTxt.toString();
}

наслаждайтесь!