Dom查看数据库mysql_MySQL查找和替换HTML DOM标签

这篇博客介绍了如何利用MySQL的LOCATE和INSERT函数,以及存储过程来删除数据库中HTML字符串内的广告标签。首先,通过单条SQL语句删除第一个标签,然后通过自定义的存储过程fnStripTags递归移除所有广告标签。最后,展示了如何更新数据库内容以应用这个功能。此方法适用于处理含有多个DOM标签的情况。
摘要由CSDN通过智能技术生成

有如下一个html字符串保存在mysql数据库中:

文本

广告 a.jpg

文本

现在要从数据库数据中删除中间的广告标签,如何用mysql语句实现?

我们要用到两个主要函数:LOCATE和INSERT。

第1步 一句mysql查找

首先,如果我们用一句mysql语句:

select

Insert(

post_content,

Locate( '

', post_content ),

Locate( '', post_content, Locate( '

', post_content )) - Locate( "
", post_content ) + LENGTH('
'),

''

)

as new_content from wp_posts where ID=146;

LOCATE(substr,str)或LOCATE(substr,str,pos):查找字符串第一次出现的位置。

INSERT(str, pos, len, newstr):将字符串中指定位置和长度的子字符串替换为另外一个字符串。

这样我们就能查出删除了第一个

标签的内容,但是如果有多个标签,则剩下的标签没有替换。

第2步 存储过程替换

那么,我们就用存储过程来解决:

SET GLOBAL log_bin_trust_function_creators=1;

DROP FUNCTION IF EXISTS fnStripTags;

DELIMITER |

CREATE FUNCTION fnStripTags( Dirty longtext, BeginStr varchar(30), EndStr varchar(30) )

RETURNS longtext

DETERMINISTIC

BEGIN

DECLARE iStart, iEnd, iLength int;

WHILE Locate( BeginStr, Dirty ) > 0 And Locate( EndStr, Dirty, Locate( BeginStr, Dirty )) > 0 DO

BEGIN

SET iStart = Locate( BeginStr, Dirty ), iEnd = Locate( EndStr, Dirty, Locate( BeginStr, Dirty ));

SET iLength = ( iEnd - iStart ) + LENGTH( EndStr );

IF iLength > 0 THEN

BEGIN

SET Dirty = Insert( Dirty, iStart, iLength, '');

END;

END IF;

END;

END WHILE;

RETURN Dirty;

END;

|

DELIMITER ;

再调用就可以了:

select LENGTH(post_content), post_content from wp_posts where ID=146;

第3步 更新

如果要更改内容,直接用update语句就能完成:

update wp_posts set post_content = fnStripTags(post_content, '

', '
') where ID=146;

同样,如果是其他DOM格式,也是可以的,例如:

update wp_posts set post_content = fnStripTags(post_content, '

', '
') where ID=146;

功效是一样的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值