萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 程式設計 >  >> 資料庫 >> MySQL 教學

MySQL 自定義函數移除 HTML 標簽的兩種實現方式

函數一:循環定位 <>< > 成對刪除

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
        SET iStart = LOCATE('<', Dirty);
        SET iEnd = LOCATE('>', Dirty, iStart);
        SET iLength = (iEnd - iStart) + 1;
        IF iLength > 0 THEN
            SET Dirty = INSERT(Dirty, iStart, iLength, '');
        END IF;
    END WHILE;
    RETURN Dirty;
END|
DELIMITER ;
SELECT fnStripTags('this is a test, nothing more');

函數二:LOOP 循環 + 條件處理

CREATE FUNCTION strip_tags(str TEXT) RETURNS TEXT
BEGIN
    DECLARE start_pos, end_pos INT DEFAULT 1;
    LOOP
        SET start_pos = LOCATE('<', str, start_pos);
        IF !start_pos THEN RETURN str; END IF;
        SET end_pos = LOCATE('>', str, start_pos);
        IF !end_pos THEN SET end_pos = start_pos; END IF;
        SET str = INSERT(str, start_pos, end_pos - start_pos + 1, '');
    END LOOP;
END;
SELECT strip_tags('hello wo<>rld <again<.');

PHP 替代方案(應用層處理更簡單)

Test paragraph.

Other text'; echo strip_tags($text); // 全部去除 echo strip_tags($text, '

'); // 保留

和 ?>

輸出:Test paragraph. Other text /

Test paragraph.

Other text

copyright © 萬盛學電腦網 all rights reserved