如何仅将特殊字符转换为html实体而不转义<,>,“和'?

时间:2019-05-01 08:52:24

标签: java html encoding java-8 html-entities

我需要对发送给html5实体的邮件中的特殊字符进行转义,因为即使将邮件作为utf8发送,某些客户端邮件也无法正确显示它们。我不想直接在邮件中使用实体,因为邮件是由测试人员制作的,我们也不想强制测试人员学习所有html5实体。

我尝试使用

MyMethod(int? somePara)

link

但是它们都转义了somePara : ""org.unbescape.html.HtmlEscape.escapeHtml​( string, HtmlEscapeType.HTML5_NAMED_REFERENCES_DEFAULT_TO_DECIMAL, HtmlEscapeLevel.LEVEL_2_ALL_NON_ASCII_PLUS_MARKUP_SIGNIFICANT ) <>个字符。

现在我正在使用这种自制方法:

"

示例:

'

输出:

public static final String encodeHTML(final String s) {
    String res = HtmlEscape.escapeHtml(
        s, 
        HtmlEscapeType.HTML5_NAMED_REFERENCES_DEFAULT_TO_DECIMAL,
        HtmlEscapeLevel.LEVEL_2_ALL_NON_ASCII_PLUS_MARKUP_SIGNIFICANT
    );

    res = res.replaceAll("&lt;", "<");
    res = res.replaceAll("&gt;", ">");
    res = res.replaceAll("&quot;", "\"");
    res = res.replaceAll("&apos;", "'");
    res = res.replaceAll("&amp;", "&");

    return res;
}

这就是我想要的,但是没有更标准的东西了吗?

1 个答案:

答案 0 :(得分:1)

以下代码仅帮助您转换特殊字符。

import org.apache.commons.text.StringEscapeUtils;
import org.apache.commons.text.translate.AggregateTranslator;
import org.apache.commons.text.translate.EntityArrays;
import org.apache.commons.text.translate.LookupTranslator;

public String encodeHTML(String s) {

    StringEscapeUtils.Builder buider =StringEscapeUtils
        .builder(new AggregateTranslator(new LookupTranslator(EntityArrays.ISO8859_1_ESCAPE),
            new LookupTranslator(EntityArrays.HTML40_EXTENDED_ESCAPE)));

    return buider.escape(s).toString();
  }