首页新闻找找看学习计划

如何用PHP为指定class内的超链接批量增加http头?

0
悬赏园豆:100 [待解决问题]

比如说将:

<div class="demo">
<a href="http://www.163.com/1.html">111</a>
<a href="http://www.qq.com/1.html">222</a>
</div>
改变为:
<div class="demo">
<a href="http://www.aaaxxx.com/u.php?=http://www.163.com/1.html">111</a>
<a href="http://www.aaaxxx.com/u.php?=http://www.qq.com/1.html">222</a>
</div>

 

说明:此效果用于无损外链,为了预防网站中的外链地址影响本站权重而求,所以JS之类的前端代码没有作用,只能求PHP直接输出的。

perseus的主页 perseus | 初学一级 | 园豆:104
提问于:2014-01-26 01:35
< >
分享
所有回答(3)
0

 考虑用javascript做吧。  

迟到的笨鸟 | 园豆:216 (菜鸟二级) | 2014-01-26 07:04

那个有了,其实道题的作用是无损外链,预防网站中的外链影响自己的权重,JS对这个要求无效。

支持(0) 反对(0) perseus | 园豆:104 (初学一级) | 2014-01-26 07:05

@perseus: 笨办法就批量查找替换。

高大上的办法就用正则了。 看你需要处理多少个类似的情况。

如果数量不多,直接批量查找替换了事。

支持(0) 反对(0) 迟到的笨鸟 | 园豆:216 (菜鸟二级) | 2014-01-26 07:16

@迟到的笨鸟: 我不会写PHP,应该蛮多吧,我想应用在评论上,还有留言板,只有这些地方才会遍布外链,能帮我写一个吗?谢谢!

支持(0) 反对(0) perseus | 园豆:104 (初学一级) | 2014-01-26 07:18
1

1.匹配到class="demo"的div

preg_match_all("/<div class=\"demo\">[\s\S]*?<\/div>/i", $contents, $match);

2.遍历$match[0]

3.替换连接内容

preg_replace('/<a href=\"(.*?)\">([\s\S]*?)<\/a>/i', '<a href="$1">$2</a>', $string);

4.把内容放回去

 

直接替换应该也可以,但要处理div中除a标签之外的内容,貌似还比较麻烦。

斯诺登 | 园豆:1291 (小虾三级) | 2014-01-26 14:36

是这样写吗?

<div class="demo">
<a href="http://www.163.com/1.html">111</a>
<a href="http://www.qq.com/1.html">222</a>
</div>
<?
preg_match_all("/<div class=\"demo\">[\s\S]*?<\/div>/i", $contents, $match);
$match[0]
preg_replace('/<a href=\"(.*?)\">([\s\S]*?)<\/a>/i', '<a href="$1">$2</a>', $string);
?>

没起作用啊~哭!我不会PHP的~

支持(0) 反对(0) perseus | 园豆:104 (初学一级) | 2014-01-26 16:41

@perseus: 好像php标签写错了吧,<?php       ?>

支持(0) 反对(0) ✎﹏ℳ๓₯㎕ღ | 园豆:1497 (小虾三级) | 2014-01-26 16:42

@MrLenon: 

<div class="demo">
<a href="http://www.163.com/1.html">111</a>
<a href="http://www.qq.com/1.html">222</a>
</div>
<?php
preg_match_all("/<div class=\"demo\">[\s\S]*?<\/div>/i", $contents, $match);
$match[0]
preg_replace('/<a href=\"(.*?)\">([\s\S]*?)<\/a>/i', '<a href="$1">$2</a>', $string);
?>

也没起作用呢~

支持(0) 反对(0) perseus | 园豆:104 (初学一级) | 2014-01-26 16:44

@perseus: 你确定你的preg_match_all方法参数没写错?

支持(0) 反对(0) ✎﹏ℳ๓₯㎕ღ | 园豆:1497 (小虾三级) | 2014-01-26 16:47

@MrLenon: 

我完全不会PHP,不知道呀~帮我写一下好吗?拜托拜托!

支持(0) 反对(0) perseus | 园豆:104 (初学一级) | 2014-01-26 16:48

@perseus: 其实我也不会PHP,只是坐我右边的同事是做PHP的,耳濡目染,我只是能看懂一点代码而已。。。。

支持(0) 反对(0) ✎﹏ℳ๓₯㎕ღ | 园豆:1497 (小虾三级) | 2014-01-26 16:50

@perseus: 你的参数定义了吗?$contents, $match, $string

支持(0) 反对(0) ✎﹏ℳ๓₯㎕ღ | 园豆:1497 (小虾三级) | 2014-01-26 16:50

@MrLenon: 

兄弟,让你同事帮忙整一下,谢谢了!

支持(0) 反对(0) perseus | 园豆:104 (初学一级) | 2014-01-26 16:51

@perseus: 你的参数定义了吗?$contents, $match, $string

支持(0) 反对(0) ✎﹏ℳ๓₯㎕ღ | 园豆:1497 (小虾三级) | 2014-01-26 16:55

@MrLenon: 

不是,那玩意儿在哪定义来着?我是做平面的,在学着用源码做站。

支持(0) 反对(0) perseus | 园豆:104 (初学一级) | 2014-01-26 16:56

大哥啊,出来帮我写个完整的好吗?俺看不懂PHP啊,HTML会一些~

支持(0) 反对(0) perseus | 园豆:104 (初学一级) | 2014-01-26 16:57

@perseus: <div class="demo">
<a href="http://www.163.com/1.html">111</a>
<a href="http://www.qq.com/1.html">222</a>
</div>
<?php

$contents='';

$match='';

$string='';
preg_match_all("/<div class=\"demo\">[\s\S]*?<\/div>/i", $contents, $match);
$match[0]
preg_replace('/<a href=\"(.*?)\">([\s\S]*?)<\/a>/i', '<a href="$1">$2</a>', $string);
?>

支持(0) 反对(0) ✎﹏ℳ๓₯㎕ღ | 园豆:1497 (小虾三级) | 2014-01-26 16:59

@MrLenon: 

Parse error: syntax error, unexpected T_STRING in E:\APMServ5.2.6\www\htdocs\PHP\demo1.php on line 18

提示以下这行有错:

preg_replace('/<a href=\"(.*?)\">([\s\S]*?)<\/a>/i', '<a href="$1">$2</a>', $string);

支持(0) 反对(0) perseus | 园豆:104 (初学一级) | 2014-01-26 17:03

@perseus: preg_replace("/<a href=\"(.*?)\">([\s\S]*?)<\/a>/i", "<a href="$1">"$2"</a>", $string);  外层的单引号改为双引号,还有$1,$2定义了吗?

支持(0) 反对(1) ✎﹏ℳ๓₯㎕ღ | 园豆:1497 (小虾三级) | 2014-01-26 17:07

@MrLenon:

晕,我不求这效果了还不行吗?我去别的地方发贴。

支持(0) 反对(0) perseus | 园豆:104 (初学一级) | 2014-01-26 17:08

@perseus: 你不懂代码逻辑很难跟你讲清楚的,你还是找个会PHP的当面请教的好。

支持(0) 反对(0) 卓酷 | 园豆:65 (初学一级) | 2014-01-27 15:28
0

2楼方案应该可行!

✎﹏ℳ๓₯㎕ღ | 园豆:1497 (小虾三级) | 2014-01-26 16:42
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册