Что делать, если у вас есть символы <и> как часть текста, а не как часть HTML. Даже если ваша строка содержит неработающий HTML-тег в конце строки. Итак, вы должны использовать эту версию функции:
SET GLOBAL log_bin_trust_function_creators=1;
DROP FUNCTION IF EXISTS fnStripTags;
DELIMITER |
CREATE FUNCTION fnStripTags( Dirty varchar(4096) )
RETURNS varchar(4096)
DETERMINISTIC
BEGIN
DECLARE iStart, iEnd, iLength, DirtyLength, DirtyTail int;
DECLARE iNextLessThenAngleBracket, iLengthToNextLessThenAngleBracket int;
WHILE Locate( '<', Dirty ) > 0 And Locate( '>', Dirty, Locate( '<', Dirty )) > 0 DO
BEGIN
SET iStart = Locate( '<', Dirty ), iEnd = Locate( '>', Dirty, Locate('<', Dirty ));
SET iNextLessThenAngleBracket = Locate( '<', Dirty, Locate('<', Dirty ) + 1);
SET iLength = ( iEnd - iStart) + 1;
SET iLengthToNextLessThenAngleBracket = ( iNextLessThenAngleBracket - iStart) + 1;
IF iLength < iLengthToNextLessThenAngleBracket THEN
BEGIN
IF iLength > 0 THEN
BEGIN
SET Dirty = Insert( Dirty, iStart, iLength, '');
END;
END IF;
END;
ELSE
BEGIN
IF iNextLessThenAngleBracket != 0 THEN
BEGIN
SET Dirty = Insert( Dirty, iStart, 1, '*/*');
END;
ELSE
BEGIN
SET Dirty = Insert( Dirty, iStart, iLength, '');
END;
END IF;
END;
END IF;
END;
END WHILE;
IF Locate( '<', Dirty ) > 0 THEN
BEGIN
SET DirtyLength = CHAR_LENGTH(Dirty);
SET DirtyTail = DirtyLength - Locate( '<', Dirty ) + 1;
SET Dirty = Insert( Dirty, Locate( '<', Dirty ), DirtyTail, '');
END;
END IF;
BEGIN
SET Dirty = REPLACE(Dirty, '*/*', '<');
END;
RETURN Dirty;
END;
|
DELIMITER ;