java - 如何仅将特殊字符转换为 html 实体而不转义 <、>、" 和 '?
问题描述
我需要将邮件中的特殊字符转义为 html5 实体,因为即使邮件以 utf8 格式发送,某些客户端邮件也无法正确显示它们。我不想在邮件中直接使用实体,因为邮件是由测试人员制作的,我们不想强制测试人员学习所有 html5 实体。
我试着用
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("<", "<");
res = res.replaceAll(">", ">");
res = res.replaceAll(""", "\"");
res = res.replaceAll("'", "'");
res = res.replaceAll("&", "&");
return res;
}
例子:
encodeHTML("<div id='a' class\"ciao\">& ®</div>")
输出:
<div id='a' class"ciao">& ®</div>
这就是我想要的,但没有更标准的东西吗?
解决方案
以下代码可帮助您仅转换特殊字符。
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();
}
推荐阅读
- python - 如何计算 2 个不同 CORPUES 之间的余弦相似度?
- python - 如何使 python 模块记录器与任何主记录器一起工作?
- sql - Liquibase的where标签中的两个条件
- javascript - How to fix sorting issue date in datatables column?
- c++ - 检查 std::filesystem::path 是否在目录中
- python-3.x - 它在 DF1 中而不在 DF 中,但仅匹配特定列
- python - 如何在python中全局定义一个列表
- python - 使用 Python ibm_db 包将时间戳更新为 DB2 中的当前时间戳
- python - 如何获取 Pandas Dataframe 的最后一行?
- algorithm - 如果我们在创建 Huffman Tree 时不一致会发生什么?