首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >与PHP strip_tags等价的MySQL查询是什么?

问与PHP strip_tags等价的MySQL查询是什么?
EN

Stack Overflow用户
提问于 2011-10-05 05:47:08
回答 9查看 41.3K关注 0票数 24

我有一个大型数据库,其中包含有<a>标签的记录,我想删除它们。当然,也有一种方法,我可以创建一个PHP脚本来选择全部,使用strip_tags并更新数据库,但这需要很长时间。那么,如何用一个简单(或复杂)的MySQL查询做到这一点呢?

EN

回答 9

Stack Overflow用户

回答已采纳

发布于 2011-10-05 06:00:08

我不认为有任何有效的方法可以单独在MySQL中做到这一点。

MySQL确实有一个REPLACE()函数,但它只能替换常量字符串,而不能替换模式。您可以编写一个MySQL存储函数来搜索和替换标记,但是在这一点上,您最好编写一个PHP来完成这项工作。它可能不是很快,但它可能会写得更快。

票数 6
EN

Stack Overflow用户

发布于 2019-03-25 19:42:22

MySQL >= 5.5提供XML函数来解决您的问题:

代码语言:javascript
复制
SELECT ExtractValue(field, '//text()') FROM table;

参考:https://dev.mysql.com/doc/refman/5.5/en/xml-functions.html

票数 31
EN

Stack Overflow用户

发布于 2012-11-12 23:38:09

这就是了:

代码语言: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
票数 27
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7654436

复制
相关文章

相似问题

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