Dede数据库批量修改文章内容超链接代码

最近搞了一个新站,把就网站的内容全部采集了,但是就网站里面含有超链接,在新网站中的超链接是无效的,而且很多超链接,在Mysql中不支持正则表达式,原来想在Mysql中替换掉','') -->

这样的话比如超链接 替换后会留下 http://www.0535code.com/123.html 超链接,这种效果不是想要的,然后想了其他的办法,用PHP+Mysql,php的preg_replace函数支持正则表达式,查了下这个函数和正则表达式,用以下程序即可批量替换。

<?php
//如是影响的条数为-1,则证明替换失败。
require_once("./include/common.inc.php");//使用的时候更改一下引用文件名
$sql="select aid,body from dede_addonarticle where body like '%域名%'";
$row=0;
$dsql->execute('me',$sql);
while($rs=$dsql->getArray('me')){
$pattern='/<a.*href=".*www\.域名\.com\/.*.*>(.*)<\/a>/U';
$str=$rs['body'];
$replacement='${1}';
$str2=preg_replace($pattern,$replacement,$str);
$aid=$rs['aid'];
//$sqlbak="update_addonarticel set body='$str' where aid=$aid";
//file_put_contents("./logbak.txt",$sqlbak.';',FILE_APPEND);
//主要是为了防止替换错误恢复使用
$replacesql="update dede_addonarticle set body=replace(body,'$str','$str2') where aid=$aid";
//使用的时候更改一下表名
//echo '<br />'.$replacesql;
if(!$dsql->executenonequery($replacesql)){
    echo "error-aid--->".$rs['aid'].'<br/>';
};
file_put_contents("./log.txt",$replacesql,FILE_APPEND);
$row++;
}
echo '影响的条数'.$row;

?>

然后还有一个问题,执行了以后发现部分超链接还是存在,然后看了下,原来是正则没有匹配到,那需要再复制一个文件,修改下$pattern=’/(.*)<\/a>/U’;这个正则表达式,一般网站超链接会写两种,第一种是http://ww.0535code.com/目录,另一种是http://0535code.com/目录,一个带www的一个不带的,所以正则没有匹配到,修改下如下:$pattern=’/(.*) 就是在正则中去掉www即可。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

This site uses Akismet to reduce spam. Learn how your comment data is processed.