You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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("&#60;");
            } else if (c == '>') {
                sb.append("&#62;");
            } else if (c == '&') {
                sb.append("&#38;");
            } else if (c == '"') {
                sb.append("&#34;");
            } else if (c == '\'') {
                sb.append("&#39;");
            } 
            // 处理所有非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));
        // 输出结果:&#62; &#8364; &#27979;&#35797;&#25991;&#26723;
    }
}

内容的提问来源于stack exchange,提问作者Mko

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 17:15:09