首页 > 数据库 > mysql教程 > 如何准确搜索MySQL包含HTML标签的列?

如何准确搜索MySQL包含HTML标签的列?

DDD
发布: 2024-12-14 10:05:10
原创
171 人浏览过

How to Accurately Search MySQL Columns Containing HTML Tags?

从记录中删除 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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板