package com.hotent.util;/**
 * @program: cbjs-mvue-master
 * @description:
 * @author: zhao yue yue
 * @create: 2025-11-26 15:57
 */

import org.jsoup.Jsoup;

import java.util.regex.Pattern;

/**
 *@author: zhao yue yue
 *@create: 2025-11-26 15:57
 */
public class HtmlUtils {
    private static final Pattern HTML_TAG_PATTERN = Pattern.compile("<[^>]+>");
    private static final Pattern HTML_ENTITY_PATTERN = Pattern.compile("&[a-zA-Z]+;");

    /**
     * 综合方法：去除所有HTML标签和实体
     */
    public static String stripHtml(String html) {
        if (html == null || html.isEmpty()) {
            return html;
        }

        // 方法1：使用JSoup（推荐）
        return Jsoup.parse(html).text();
    }

    /**
     * 快速方法：使用正则表达式
     */
    public static String stripHtmlFast(String html) {
        if (html == null || html.isEmpty()) {
            return html;
        }

        String result = HTML_TAG_PATTERN.matcher(html).replaceAll("");
        result = HTML_ENTITY_PATTERN.matcher(result).replaceAll("");
        return result.trim();
    }

    /**
     * 保留换行格式的方法
     */
    public static String stripHtmlKeepNewlines(String html) {
        if (html == null || html.isEmpty()) {
            return html;
        }

        // 替换常见的块级标签为换行符
        String withNewlines = html.replaceAll("</p>", "\n")
                .replaceAll("<br[^>]*>", "\n")
                .replaceAll("</div>", "\n")
                .replaceAll("</tr>", "\n")
                .replaceAll("</span>", "\n")
                .replaceAll("</li>", "\n");

        // 移除所有HTML标签
        return HTML_TAG_PATTERN.matcher(withNewlines).replaceAll("").trim();
    }

    /**
     * 安全方法：处理XSS攻击
     */
    /*public static String sanitizeHtml(String html) {
        if (html == null || html.isEmpty()) {
            return html;
        }

        // 使用JSoup进行安全清理
        return Jsoup.clean(html,
                Safelist.none()
                        .addTags("br", "p") // 允许的标签
                        .addAttributes("a", "href") // 允许的属性
        );
    }*/
}
