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[]"&amp;", "&quot;", "&lt;", "&gt;")

【讨论】:

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 推荐的六个重要字符的版本。这适用于像 &lt;textarea&gt;...&lt;/textarea&gt; 这样的 HTML 内容元素,但不适用于像 &lt;input value="..."&gt; 这样的 HTML 属性,因为后者通常不加引号。

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

【讨论】:

【参考方案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("&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();

享受吧!

【讨论】:

你应该使用StringBuilder。【参考方案6】:

如果您使用 Wicket,请使用:

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

【讨论】:

以上是关于Java 转义 HTML的主要内容,如果未能解决你的问题,请参考以下文章

java中的转义字符的作用是啥?

java 实现html特殊字符转义

html转义/反转义

MyBatis中特殊符号的转义

java特殊字符转义

java如何将特殊字符转义