web-dev-qa-db-ja.com

Java HTMLをエスケープ

現在、org.Apache.commons.lang.StringEscapeUtils escapeHtml()を使用して文字列内の不要なHTMLタグをエスケープしていますが、&something;,も、私はしたくない。

HTMLタグをエスケープするための解決策を知っていますが、私の特別な(まあ、一部の人々にとっては、ここでは普通です;))文字はそのままにしておきますか?

前もって感謝します!

バラス

37
Balázs Németh
StringUtils.replaceEach(str, new String[]{"&", "\"", "<", ">"}, new String[]{"&amp;", "&quot;", "&lt;", "&gt;"})
30
pingw33n

Androidの場合は、代わりにTextUtils.htmlEncode(String)を使用します。

21
goncalossilva

これは私にとって非常に良さそうです:

org/Apache/commons/lang3/StringEscapeUtils.html#escapeXml(Java.lang.String)

XMLを要求することで、優れたHTMLであるXHTMLを取得できます。

9

[〜#〜] owasp [〜#〜] で推奨されているように、6つの重要な文字を置き換えるバージョンがあります。これは<textarea>...</textarea>のようなHTMLコンテンツ要素には適していますが、<input value="...">のようなHTML属性には適していません。後者はしばしば引用符で囲まれないためです。

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

コメントを追加するには遅すぎることはわかっていますが、おそらく次のコードが役立つでしょう。

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();
}

楽しい!

1

Wicketを使用している場合は、次を使用します。

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