現在、org.Apache.commons.lang.StringEscapeUtils escapeHtml()
を使用して文字列内の不要なHTMLタグをエスケープしていますが、&something;,
も、私はしたくない。
HTMLタグをエスケープするための解決策を知っていますが、私の特別な(まあ、一部の人々にとっては、ここでは普通です;))文字はそのままにしておきますか?
前もって感謝します!
バラス
StringUtils.replaceEach(str, new String[]{"&", "\"", "<", ">"}, new String[]{"&", """, "<", ">"})
Androidの場合は、代わりにTextUtils.htmlEncode(String)
を使用します。
これは私にとって非常に良さそうです:
org/Apache/commons/lang3/StringEscapeUtils.html#escapeXml(Java.lang.String)
XMLを要求することで、優れたHTMLであるXHTMLを取得できます。
[〜#〜] owasp [〜#〜] で推奨されているように、6つの重要な文字を置き換えるバージョンがあります。これは<textarea>...</textarea>
のようなHTMLコンテンツ要素には適していますが、<input value="...">
のようなHTML属性には適していません。後者はしばしば引用符で囲まれないためです。
StringUtils.replaceEach(text,
new String[]{"&", "<", ">", "\"", "'", "/"},
new String[]{"&", "<", ">", """, "'", "/"});
コメントを追加するには遅すぎることはわかっていますが、おそらく次のコードが役立つでしょう。
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("<");
break;
case '>':
escapedTxt.append(">");
break;
case '&':
escapedTxt.append("&");
break;
case '"':
escapedTxt.append(""");
break;
case '\'':
escapedTxt.append("'");
break;
case '/':
escapedTxt.append("/");
break;
default:
escapedTxt.append(tmp);
}
}
return escapedTxt.toString();
}
楽しい!
Wicketを使用している場合は、次を使用します。
import org.Apache.wicket.util.string.Strings;
...
CharSequence cs = Strings.escapeMarkup(src);
String str = Strings.escapeMarkup(src).toString();