msql 過濾HTML標籤函式
阿新 • • 發佈:2019-02-20
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 |
嚴格來說,以上兩個函式只是過濾掉了"<"開頭,">"結尾的字串,並沒有對HTML標籤,其他標籤進行區分,也沒有過濾" "之類的空白字元,是不完美的方案,以下對第一個函式進行改進,新增對" "的過濾,還是不完美方案
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 ;