首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >从记录中删除HTML标记

从记录中删除HTML标记
EN

Stack Overflow用户
提问于 2010-04-13 16:12:39
回答 10查看 86.3K关注 0票数 30

我需要帮助形成MYSQL查询从表一列具有以下内容

Row1 : this is first <a href='mytext.txt'>row</a> from the table

Row 2 : THis is the second row <img src ='mytext.jpg'> my image is there

Row 3 : <p>This is the Third row my mytext is there </p>

Row 4 : <p class='te_mytext'>This is the Third row my text is there </p>

这是我试图搜索关键字'mytext‘的表行

我的问题是

代码语言:javascript
复制
SELECT * from table  WHERE colmn_name ` like '%mytext%' "

我会得到所有的4行作为结果,但结果是错误的。我需要获得正确的输出,因为只有第3行。原因是此行仅在内容中包含mytext所有其他内容不在内容中,而在所有行中具有mytext

如何编写MySQL查询?

EN

回答 10

Stack Overflow用户

发布于 2010-06-07 22:40:23

尝试这个解决方案:我自己没有试过,但显然是有效的。

来源:http://forums.mysql.com/read.php?52,177343,177985#msg-177985

代码语言:javascript
复制
   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>');
票数 49
EN

Stack Overflow用户

发布于 2012-11-13 00:18:38

下面是我的strip_tags函数的实现:

代码语言:javascript
复制
CREATE FUNCTION `strip_tags`($str text) RETURNS text
BEGIN
    DECLARE $start, $end INT DEFAULT 1;
    LOOP
        SET $start = LOCATE("<", $str, $start);
        IF (!$start) THEN RETURN $str; END IF;
        SET $end = LOCATE(">", $str, $start);
        IF (!$end) THEN SET $end = $start; END IF;
        SET $str = INSERT($str, $start, $end - $start + 1, "");
    END LOOP;
END;

我确保它删除了不匹配的左括号,因为它们是危险的,尽管它忽略了任何不成对的右括号,因为它们是无害的。

代码语言:javascript
复制
mysql> select strip_tags('<span>hel<b>lo <a href="world">wo<>rld</a> <<x>again<.');
+----------------------------------------------------------------------+
| strip_tags('<span>hel<b>lo <a href="world">wo<>rld</a> <<x>again<.') |
+----------------------------------------------------------------------+
| hello world again.                                                   |
+----------------------------------------------------------------------+
1 row in set

好好享受吧。

票数 26
EN

Stack Overflow用户

发布于 2012-03-10 15:57:41

如果您的内容总是以标签(等)开头

试试这个:

代码语言:javascript
复制
SELECT * from table  WHERE colmn_name REGEXP  '>[^<]*mytext';
票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2627940

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档