1. 程式人生 > >msql 過濾HTML標籤函式

msql 過濾HTML標籤函式

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 ;