msql 过滤HTML标签函数

mysql中利用函数与过程过滤html标签 - 摘要: 本文讲的是mysql中利用函数与过程过滤html标签, mysql本身没有去除html代码的内置函数,但是在一些情况下,不得不在数据库层次提取一些去除了html代码的纯文本。 经过谷歌后,找到了以下两个函数,经测试,均可用。 函数1:  代码如下 复制代码 SET GL

mysql本身没有去除html代码的内置函数,但是在一些情况下,不得不在数据库层次提取一些去除了html代码的纯文本。

经过谷歌后,找到了以下两个函数,经测试,均可用。

函数1:

 代码如下 复制代码
SET GLOBAL log_bin_trust_function_creators=1;   
DROP FUNCTION IF EXISTS fnStripTags;   
DELIMITER |   
CREATE FUNCTION fnStripTags( Dirty varchar(4000) )   
RETURNS varchar(4000)   
DETERMINISTIC    
BEGIN  
  DECLARE iStart, iEnd, iLength int;   
    WHILE Locate( '<', Dirty ) > 0 And Locate( '>', Dirty, Locate( '<', Dirty )) > 0 DO   
      BEGIN  
        SET iStart = Locate( '<', Dirty ), iEnd = Locate( '>', Dirty, Locate('<', Dirty ));   
        SET iLength = ( iEnd - iStart) + 1;   
        IF iLength > 0 THEN  
          BEGIN  
            SET Dirty = Insert( Dirty, iStart, iLength, '');   
          END;   
        END IF;   
      END;   
    END WHILE;   
    RETURN Dirty;   
END;   
|   
DELIMITER ;   
SELECT fnStripTags('this <html>is <b>a test</b>, nothing more</html>');  

 

函数2:

 代码如下 复制代码

CREATE FUNCTION `strip_tags`($str text) RETURNS text   
BEGIN  
    DECLARE $start, $end INT DEFAULT 1;   
    LOOP   
        SET $start = LOCATE("<", $str, $start);   
        IF (!$start) THEN RETURN $str; 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 strip_tags('<span>hel<b>lo <a href="world">wo<>rld</a> <<x>again<.');


严格来说,以上两个函数只是过滤掉了"<"开头,">"结尾的字符串,并没有对HTML标签,其他标签进行区分,也没有过滤"&nbsp;"之类的空白字符,是不完美的方案,以下对第一个函数进行改进,添加对"&nbsp;"的过滤,还是不完美方案

SET GLOBAL log_bin_trust_function_creators=1;   
DROP FUNCTION IF EXISTS fnStripTags;   
DELIMITER |   
CREATE FUNCTION fnStripTags( Dirty TEXT )   
RETURNS TEXT   
DETERMINISTIC    
BEGIN  
  DECLARE iStart, iEnd, iLength INT;   
    WHILE LOCATE( '<', Dirty ) > 0 AND LOCATE( '>', Dirty, LOCATE( '<', Dirty )) > 0 DO   
      BEGIN  
        SET iStart = LOCATE( '<', Dirty ), iEnd = LOCATE( '>', Dirty, LOCATE('<', Dirty ));   
        SET iLength = ( iEnd - iStart) + 1;   
        IF iLength > 0 THEN  
          BEGIN  
            SET Dirty = INSERT( Dirty, iStart, iLength, '');   
          END;   
        END IF;   
      END;   
    END WHILE;
    
     WHILE LOCATE( '&nb和谐显示sp;', Dirty ) > 0 DO   
      BEGIN  
        SET iStart = LOCATE( '&nb和谐显示sp;', Dirty );   
        SET iLength = 6;
        SET Dirty = INSERT( Dirty, iStart, iLength, '');         
      END;   
    END WHILE;    
       
    RETURN Dirty;   
END;   
|   
DELIMITER ; 


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值