MySql、html标签、内容过滤查询

在实际开发中,我们通常需要从数据库中获取某个字段的值,但是这个字段中可能含有HTML标签,如下面这个例子:

<p>这是一段包含HTML标签的文本,<strong>加粗</strong><em>斜体</em><a href="https://www.example.com">链接</a></p>

如果我们希望在查询时忽略这些HTML标签,只关注文本内容,就可以使用上述MySQL函数。

使用方法很简单,只需要在查询语句中调用该函数即可。比如,如果我们希望查找上述例子中包含“链接”的记录,可以这样写查询语句:

SELECT * FROM my_table WHERE fnStripTags(my_html_field) LIKE '%链接%';

这个查询语句会先调用fnStripTags()函数过滤掉HTML标签,然后再在过滤后的文本中查找“链接”字符串。这样就能查找到包含“链接”的记录,而不会受到HTML标签的影响。

CREATE DEFINER=`root`@`localhost` FUNCTION `fnStripTags`( Dirty TEXT ) RETURNS text CHARSET utf8
    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

需要注意的是,这个函数只能过滤HTML标签、 ,不能过滤其他类型的特殊字符,如JavaScript代码、CSS样式等。如果需要过滤其他类型的特殊字符,就需要另外编写过滤函数。

希望这些说明对读者有所帮助,谢谢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值