mysql过滤style,script,html标签函数

本文介绍了一个自定义的MySQL函数,用于从文章中过滤掉style、script和其他HTML标签,以提高Elasticsearch搜索结果的可读性和准确性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

mysql过滤style,script,html标签函数

今天用elasticsearch搜索mysql导入的文章,高亮内容大片的html标签,并且很多还是截断的。网上看了看有说用mysql函数过滤的,但是大多效果不好,只过滤了部分数据。只好自己优化了下,效果还不错:

SET GLOBAL log_bin_trust_function_creators=1;   
DROP FUNCTION IF EXISTS del_script_tags;  
CREATE FUNCTION `del_script_tags`($str mediumtext) RETURNS mediumtext    
BEGIN  
    DECLARE $start, $end INT DEFAULT 1;   
    LOOP_SCRIPT: LOOP   
        SET $start = LOCATE("<script", $str, $start);   
        IF (!$start) THEN LEAVE LOOP_SCRIPT; END IF;   
        SET $end = LOCATE("</script>", $str, $start);   
        IF (!$end) THEN SET $end = $start; END IF;   
        SET $str = INSERT($str, $start, $end - $start + 9, '');
    END LOOP;

		SET $start = 1;
		SET $end  = 1;
    LOOP_STYLE: LOOP   
        SET $start = LOCATE("<style", $str, $start);   
        IF (!$start) THEN LEAVE LOOP_STYLE; END IF;   
        SET $end = LOCATE("</style>", $str, $start);   
        IF (!$end) THEN SET $end = $start; END IF;   
        SET $str = INSERT($str, $start, $end - $start + 8, '');
    END LOOP;

		SET $start = 1;
		SET $end  = 1;
    LOOP   
        SET $start = LOCATE("<", $str, $start);   
        IF (!$start) THEN RETURN TRIM(REPLACE(REPLACE($str, CHAR(10), ''),' ','')); END IF;   
        SET $end = LOCATE(">", $str, $start);   
        IF (!$end) THEN SET $end = $start; END IF;   
        SET $str = INSERT($str, $start, $end - $start + 1, '');   
    END LOOP;        
END; 

使用该函数过滤即可:

select del_strip_tags('过滤字段') from table 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值