从记录中删除 HTML 标签
您可能遇到过这样的情况:您需要在包含以下内容的列中搜索特定关键字HTML 标签。但是,您可能会注意到,由于这些标签的存在,您的查询返回了不正确的结果。让我们探索如何修改 MySQL 查询以根据内容准确过滤记录,同时排除 HTML 标签。
在提供的示例中,查询 SELECT * from table WHERE colmn_name LIKE '%mytext%' 将检索所有四个行,即使只有第 3 行的内容中包含关键字“mytext”。为了克服这一挑战,请考虑 MySQL 论坛成员提出的以下解决方案:
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>');
此解决方案涉及创建一个名为 fnStripTags 的用户定义函数 (UDF),该函数接受包含 HTML 标记的脏字符串。该函数遍历字符串,定位开始 (<) 和结束 (>) 标记。它计算标签的长度并将其从字符串中删除,以生成没有 HTML 元素的干净字符串。
要使用此 UDF,您可以将其合并到原始查询中,如下所示:
SELECT * FROM table WHERE fnStripTags(column_name) LIKE '%mytext%';
通过使用此 UDF,您的查询将从搜索中排除 HTML 标记,确保您仅检索实际内容中出现关键字“mytext”的行。这种方法允许您执行更精确的数据过滤,并避免 HTML 标记的任何干扰。
以上是如何准确搜索MySQL包含HTML标签的列?的详细内容。更多信息请关注PHP中文网其他相关文章!