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:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
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:
1 |
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.