我要实现的功能是 可以多个正则来实现:
最主要的是 发帖的时候 过滤掉 a标签下内 别的网站的域名直接替换成空.(如果是本自己网站的链接 就不过滤了,就是要排除本站).
同时需要实现以下功能(可以多次正则实现):
1.替换 a标签下的 title 里的内容为空.
2.替换 a标签下的 alt 里的内容为空 同上.
3.替换把所有的< img /> 标签(图片标签) 外层加一个a标签谢谢
最主要的是 发帖的时候 过滤掉 a标签下内 别的网站的域名直接替换成空.(如果是本自己网站的链接 就不过滤了,就是要排除本站).
同时需要实现以下功能(可以多次正则实现):
1.替换 a标签下的 title 里的内容为空.
2.替换 a标签下的 alt 里的内容为空 同上.
3.替换把所有的< img /> 标签(图片标签) 外层加一个a标签谢谢
用PHP.
href 是什么?
$s= preg_replace('/<img[^>]*>/is','<a href="javascript:void(0)">\0</a>',$s); //给图片加链接
我的网站叫 www.a.com
我复制过来的原来的内容:
<a href="http://www.ddd.com">你好</a>
发帖的时候在一个地方加了本站的链接 <a href="http://www.a.com">你也好</a>最后页面的代码是:
<a href="http://www.ddd.com">你好</a>
<a href="http://www.a.com">你也好</a>这时候 我需要的是 把不是 www.a.com的 去掉,最后需要变成:
<a href="javascript:void(0)">你好</a>
<a href="http://www.a.com">你也好</a>就是说 我自己网站的内部链接 不替换了.外部的全部变成空的.
<a href="http://www.ddd.com">你好</a> 也有可能是:
<a href="http://www.ddd.com" title="你好网欢迎你" alt="点击进入你好网" >你好</a>如果能一次性的把 其他网站的 href 替换成javascript:void(0) ,title alt 为空(title="" alt="" )那更好,不能的话 就分三次替换了.
$s=preg_replace('/(<a\s*href=)"http:\/\/(?!'.$url.')(.+?)"/is','$1"javascript:void(0)"',$s);这个放在第一。
a 标签中 不一定使用 http://
如果 只是放置 . aa.com aa.cn aa.org 等等。
你要判断好长了呢!
如果放入的是 <a> 的话就 直接去掉。
比如:
<a href="http://niaolei.org.cn/posts/38845"> 可以正常替换成 <a href="javascript:void(0)">
但是 如: <a target="_blank" rel="book" href="http://niaolei.org.cn/posts/38845" title="点击查看 电影《守卫者传奇》中的猫头鹰知识大梳理"> 这样的 a和href 有东西的不行. 或者直接 不是本站的 a标签 全部删除:
<a target="_blank" rel="book" href="http://niaolei.org.cn/posts/38845" title="点击查看 电影《守卫者传奇》中的猫头鹰知识大梳理"><span>点击</span></a>
替换成: <span>点击</span>
$s=preg_replace('/<a[^>]*href="http:\/\/(?!'.$url.').+?"[^>]*>(.*?)<\/a>/is','$1',$s);
最后页面的代码是:
<a href="http://www.ddd.com">你好</a>
<a href="http://www.a.com">你也好</a>
TXT;echo preg_replace_callback('#<a.+>(.+)</a>#isU', 'back', $s);function back($r) {
$myhost = 'http://www.a.com';
if(strstr($r[0], $myhost)) return $r[0];
return "<a href='javascript:void(0)'>$r[1]</a>";
}图片的处理与此类似
你最好弄个比较全面的测试数据,这样才好调试程序
jordan102 帅哥的 可以的.
就是现在还要麻烦下:$s= preg_replace('/<img[^>]*>/is','<a href="javascript:void(0)">\0</a>',$s); //给图片加链接
这个 我看了下,还有个新需求.就是 以前的 javascript:void(0) 换成 img 里面的 src例如 :
<img src="www.gg.com/gg.jpg" />
变成: <a href="www.gg.com/gg.jpg" ><img src="www.gg.com/gg.jpg" /></a>
最后页面的代码是:
<a href="http://www.ddd.com">你好</a>
<a href="http://www.a.com">你也好</a>
<img src="www.gg.com/gg.jpg" />
TXT;echo preg_replace_callback('#<a.+>(.+)</a>|(<img.+src=.*([^\'"]+?).*>)#isU', 'back', $s);function back($r) {
if(count($r) == 4) return "<a href='$r[3]' >$r[0]</a>";
$myhost = 'http://www.a.com';
if(strstr($r[0], $myhost)) return $r[0];
return "<a href='javascript:void(0)'>$r[1]</a>";
}最后页面的代码是:
<a href='javascript:void(0)'>你好</a>
<a href="http://www.a.com">你也好</a>
<a href='www.gg.com/gg.jpg' ><img src="www.gg.com/gg.jpg" /></a>
简单的例子是很容易做的,复杂的情况下就不一定了
要尽可能多的测试
最后页面的代码是:
<a href="http://www.ddd.com">你好</a>
<a href="http://www.a.com">你也好</a>
<img src="www.gg.com/gg.jpg" />
TXT;echo preg_replace_callback('#<a.+>(.+)</a>|(<img.+src=.*([^\'"]+?).*>)#isU', 'back', $s);function back($r) {
if(count($r) == 4) return "<a href='$r[3]' >$r[0]</a>";
$myhost = 'http://www.a.com';
if(strstr($r[0], $myhost)) return $r[0];
return "<a href='javascript:void(0)'>$r[1]</a>";
}
最后页面的代码是:
<a href='javascript:void(0)'>你好</a>
<a href="http://www.a.com">你也好</a>
<a href='www.gg.com/gg.jpg' ><img src="www.gg.com/gg.jpg" /></a>这个可以哟