MySQL: rimuovere i TAG HTML da un campo
Usando nei progetti componenti tipo il TinyMCE o simili che permettono di creare contenuti formattati a piacere si ha anche il problema che in un campo testo ci possano essere anche i TAG HTML e magari ricercando ad esempio la parola STRONG o TITLE vengano restituiti risultati che poco centrano con i reali contenuti.
Una soluzione è quella di creare una funzione in MySQL che si occupi di rimuovere questi TAG in maniera che la ricerca possa avvenire solo sui contenuti puri.
Sul MySQL eseguiamo questi comandi:
DELIMITER $$
DROP FUNCTION IF EXISTS `STRIP_TAGS`$$
CREATE FUNCTION `STRIP_TAGS`( 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 ;
Per ottenere il campo pulito dai TAG è sufficiente dentro la SQL richiamare la funzione appena creata:
SELECT * FROM mytable WHERE STRIP_TAGS(myfield) LIKE '%title%';
Ora i risultati saranno solo riferiti ai reali contenuti del campo e non ai TAG HTML.