Java 转义 HTML
Posted
技术标签:
【中文标题】Java 转义 HTML【英文标题】:Java escape HTML 【发布时间】:2011-06-19 23:10:00 【问题描述】:目前我使用org.apache.commons.lang.StringEscapeUtils escapehtml()
转义字符串中不需要的 HTML 标记,但后来我意识到它也将带有重音符号的字符转义为 &something;,
,这是我不想要的。
您是否知道任何转义 HTML 标签的解决方案,但保留我的特殊(嗯,对某些人来说,它们在这里很正常;])字母原样?
提前致谢!
巴拉兹
【问题讨论】:
&something;
将被转换为 &something;
-- 您是否希望字符 '&' 不被转义?大多数情况下,用户在 UI 中输入&something;
代表的符号。而 escapeHTML 只是将该特殊字符转换为等效的 HTML 实体。
我的意思是 á 被转换为 á我不想要。我根本不希望字母被转义......其他的一切,是的。
转义 HTML 需要什么?对于 JSP?
差不多,JSF。您还有其他想法如何防止用户在 cmets 中使用标签吗?我必须启用 ,这就是为什么我必须在输出标签中使用 escape false。
+50 赏金:请尝试给出更接近原始问题的答案,转义函数不会伤害 UTF-8 字符。
【参考方案1】:
StringUtils.replaceEach(str, new String[]"&", "\"", "<", ">", new String[]"&", """, "<", ">")
【讨论】:
OWASP 还推荐'
和/
。
StringUtils 是哪个版本的?我在 commons-lang-2.2 中有一个,但没有 replaceEach 方法。不过,这并不重要,这实际上很容易实现您推荐的内容。我想要一个开箱即用的解决方案:-/
® ¶ © ½ æ ÷ §
和在 arnspublishing.com/QuickRef/ISO8859.html 找到的其余 shebang 呢? =) 替换每个都是等待发生的灾难!
@ppumkin,请进一步解释。
@MatthewDoucette 这是org.apache.commons.lang.StringUtils
: commons.apache.org/lang/api-2.5/org/apache/commons/lang/…【参考方案2】:
如果是 android,请改用 TextUtils.htmlEncode(String)
。
【讨论】:
【参考方案3】:这对我来说非常好:
org/apache/commons/lang3/StringEscapeUtils.html#escapeXml(java.lang.String)
通过询问 XML,你会得到 XHTML,这是很好的 HTML。
【讨论】:
【参考方案4】:这是替换OWASP 推荐的六个重要字符的版本。这适用于像 <textarea>...</textarea>
这样的 HTML 内容元素,但不适用于像 <input value="...">
这样的 HTML 属性,因为后者通常不加引号。
StringUtils.replaceEach(text,
new String[]"&", "<", ">", "\"", "'", "/",
new String[]"&", "<", ">", """, "'", "/");
【讨论】:
【参考方案5】:我知道添加评论为时已晚,但也许以下代码会有所帮助:
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();
享受吧!
【讨论】:
你应该使用StringBuilder。【参考方案6】:如果您使用 Wicket,请使用:
import org.apache.wicket.util.string.Strings;
...
CharSequence cs = Strings.escapeMarkup(src);
String str = Strings.escapeMarkup(src).toString();
【讨论】:
以上是关于Java 转义 HTML的主要内容,如果未能解决你的问题,请参考以下文章