Java中如何使用HTML实体编号而非名称转义HTML?
解决方案:HTML实体编号转义(Java)
一、现成类库方案
Spring Framework的HtmlUtils
如果你的项目已经引入Spring依赖,直接使用org.springframework.web.util.HtmlUtils的htmlEscapeDecimal方法即可,它会将字符转换为十进制HTML实体编号,完全匹配你的需求:
import org.springframework.web.util.HtmlUtils; public class EscapeDemo { public static void main(String[] args) { String original = "> €"; String escaped = HtmlUtils.htmlEscapeDecimal(original); // 输出结果:> € System.out.println(escaped); } }
Apache Commons Text自定义配置
虽然StringEscapeUtils.escapeHtml4默认使用实体名称,但你可以通过自定义转换器实现编号转义,利用内置的十进制实体映射:
import org.apache.commons.text.translate.CharSequenceTranslator; import org.apache.commons.text.translate.EntityArrays; import org.apache.commons.text.translate.LookupTranslator; public class CustomHtmlEscape { public static void main(String[] args) { CharSequenceTranslator decimalEscaper = new LookupTranslator( EntityArrays.HTML40_DECIMAL_ESCAPE ); String original = "> €"; String escaped = decimalEscaper.translate(original); // 输出结果:> € System.out.println(escaped); } }
二、无依赖自定义实现
如果不想引入额外类库,自己写一个轻量工具类也很简单:
public class HtmlDecimalEscapeUtils { public static String escapeToDecimal(String input) { if (input == null || input.isEmpty()) { return input; } StringBuilder sb = new StringBuilder(); for (char c : input.toCharArray()) { // 处理HTML核心特殊字符 if (c == '<') { sb.append("<"); } else if (c == '>') { sb.append(">"); } else if (c == '&') { sb.append("&"); } else if (c == '"') { sb.append("""); } else if (c == '\'') { sb.append("'"); } // 处理所有非ASCII字符(含特殊符号、中文等) else if (c > 127) { sb.append("&#").append((int) c).append(";"); } // 普通ASCII字符直接保留 else { sb.append(c); } } return sb.toString(); } public static void main(String[] args) { String test = "> € 测试文本"; System.out.println(escapeToDecimal(test)); // 输出结果:> € 测试文档 } }
内容的提问来源于stack exchange,提问作者Mko
相关产品推荐
相关产品推荐

