比如说将:
<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直接输出的。
考虑用javascript做吧。
那个有了,其实道题的作用是无损外链,预防网站中的外链影响自己的权重,JS对这个要求无效。
@perseus: 笨办法就批量查找替换。
高大上的办法就用正则了。 看你需要处理多少个类似的情况。
如果数量不多,直接批量查找替换了事。
@迟到的笨鸟: 我不会写PHP,应该蛮多吧,我想应用在评论上,还有留言板,只有这些地方才会遍布外链,能帮我写一个吗?谢谢!
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标签之外的内容,貌似还比较麻烦。
是这样写吗?
<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的~
@perseus: 好像php标签写错了吧,<?php ?>
@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);
?>
也没起作用呢~
@perseus: 你确定你的preg_match_all方法参数没写错?
@MrLenon:
我完全不会PHP,不知道呀~帮我写一下好吗?拜托拜托!
@perseus: 其实我也不会PHP,只是坐我右边的同事是做PHP的,耳濡目染,我只是能看懂一点代码而已。。。。
@perseus: 你的参数定义了吗?$contents, $match, $string
@MrLenon:
兄弟,让你同事帮忙整一下,谢谢了!
@perseus: 你的参数定义了吗?$contents, $match, $string
@MrLenon:
不是,那玩意儿在哪定义来着?我是做平面的,在学着用源码做站。
大哥啊,出来帮我写个完整的好吗?俺看不懂PHP啊,HTML会一些~
@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);
?>
@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);
@perseus: preg_replace("/<a href=\"(.*?)\">([\s\S]*?)<\/a>/i", "<a href="$1">"$2"</a>", $string); 外层的单引号改为双引号,还有$1,$2定义了吗?
@MrLenon:
晕,我不求这效果了还不行吗?我去别的地方发贴。
@perseus: 你不懂代码逻辑很难跟你讲清楚的,你还是找个会PHP的当面请教的好。
2楼方案应该可行!