修改代码使Discuz论坛(DZ6)全面屏蔽禁止URL超链接功能
2008-4-13 这几天发现我的论坛不断有人发表垃圾回复,回复内容与主题无关,且里面包含少则三四个,多则七八个网站链接,签名里也带了链接,这不仅污染了帖子,而且很可能因为这些垃圾链接而使我的网站被Google和百度等搜索引擎降权,不得已我禁止了所有链接,包括正常的链接。
刚开始我用Google搜索如何禁止DZ6(Discuz)论坛的链接功能,发现大家都答复论坛后台设置没这个选项,接着我找到这样一个帖子:
打开:include\javascript\post.js
查找并删除之:
function parseurl(str, mode) {
str= str.replace(/\s*\[code\]([\s\S]+?)\[\/code\]\s*/ig, function($1, $2) {return codetag($2);});
str = str.replace(/([^>=\]“‘\/]|^)((((https?|ftp):\/\/)|www\.)([\w\-]+\.)*[\w\-\u4e00-\u9fa5]+\.([\.a-zA-Z0-9]+|\u4E2D\u56FD|\u7F51\u7EDC|\u516C\u53F8)((\?|\/|:)+[\w\.\/=\?%\-&~`@':+!]*)+\.(jpg|gif|png|bmp))/ig, mode == ‘html’ ? ‘$1<img src=”$2″ mce_src=”$2″ border=”0″>’ : ‘$1[img]$2[/img]‘);
str = str.replace(/([^>=\]“‘\/@]|^)((((https?|ftp|gopher|news|telnet|rtsp|mms|callto|bctp|ed2k|thunder|synacast):\/\/))([\w\-]+\.)*[:\.@\-\w\u4e00-\u9fa5]+\.([\.a-zA-Z0-9]+|\u4E2D\u56FD|\u7F51\u7EDC|\u516C\u53F8)((\?|\/|:)+[\w\.\/=\?%\-&~`@':+!#]*)*)/ig, mode == ‘html’ ? ‘$1<a href=”$2″ mce_href=”$2″ target=”_blank”>$2</a>’ : ‘$1[url]$2[/url]‘);
str = str.replace(/([^\w>=\]“‘\/@]|^)((www\.)([\w\-]+\.)*[:\.@\-\w\u4e00-\u9fa5]+\.([\.a-zA-Z0-9]+|\u4E2D\u56FD|\u7F51\u7EDC|\u516C\u53F8)((\?|\/|:)+[\w\.\/=\?%\-&~`@':+!#]*)*)/ig, mode == ‘html’ ? ‘$1<a href=”$2″ mce_href=”$2″ target=”_blank”>$2</a>’ : ‘$1[url]$2[/url]‘);
str = str.replace(/([^\w->=\]:”‘\.\/]|^)(([\-\.\w]+@[\.\-\w]+(\.\w+)+))/ig, mode == ‘html’ ? ‘$1<a href=”mailto:$2″>$2</a>’ : ‘$1[email]$2[/email]‘);
for(var i = 0; i <= codecount; i++) {
str = str.replace(”[\tDISCUZ_CODE_" + i + "\t]“, codehtml[i]);
}
return str;
} 我非常高兴,马上就用UltraEdit打开了位于Discuz!_6.0.0_SC_UTF8\upload\include\javascript目录下的这个文件,修改后保存并用FTP上传到主机空间,覆盖原文件。
然后发了个新帖子测试,居然没效果。于是我接着搜索,却发现许多人问:论坛禁用URL识别后怎么无效?还是在discuz官方论坛问的,也没有一个满意的答案。又换了几个关键词搜索,还是没有满意的结果,看来得自己动手了。 于是我打开Microsoft Visual Studio .NET 2003,在discuz整个目录下的文件里查找href=,arget=”_blank”,这样的字符串,因为这两个都是DZ6自己后来给url加上去的,试了好几个文件,没效果,于是搜索url=字符串,结果“合计找到: 73 匹配文件: 21 合计搜索文件: 467”,还好,不算多。于是看那些样子比较象的地方进行修改,又是试了好几次,终于成功了!
最终修改位置如下: 打开文件Discuz!_6.0.0_SC_UTF8\upload\include\discuzcode.func.php,把第161行,162行,163行的这三行代码:
”/\[url\]\s*(www.|https?:\/\/|ftp:\/\/|gopher:\/\/|news:\/\/|telnet:\/\/|rtsp:\/\/|mms:\/\/|callto:\/\/|bctp:\/\/|ed2k:\/\/|thunder:\/\/|synacast:\/\/){1}([^\[\"']+?)\s*\[\/url\]/ie“,
”/\[url=www.([^\[\"']+?)\](.+?)\[\/url\]/is”,
”/\[url=(https?|ftp|gopher|news|telnet|rtsp|mms|callto|bctp|ed2k|thunder|synacast){1}:\/\/([^\[\"']+?)\](.+?)\[\/url\]/is”,
全部删除!删除后保存文件,上传覆盖掉空间里的这个文件,再次打开论坛帖子,你会发现原来的帖子和回复里的链接全部变成了这样子: [url=http://www.baidu.com/]112[/url]
[url=www.baidu.com/]112[/url]
也就是用户原先输入的超链接全部被屏蔽,不再显示为超链接,而是不做处理,原样输出了! 接着我发现有的用户签名里还是包含超链接,这个好办,我记得论坛设置有屏蔽签名功能的。于是登录discuz后台管理,在系统设置首页-界面与显示方式下面找到了“是否显示作者签名:”这个选项,选则否然后提交。 再次刷新帖子,发现超链接没有了,签名也没有了,哈哈,所有垃圾回复里的链接全部没了。 个人觉得现在不少论坛垃圾回复比较多,这段经历应该对大家有用,所以贴出来,呵呵。
归类:
2008-4-13 8:57 pm
落伍的论坛也屏蔽了超链接
2008-4-16 10:36 am
我还不会用链接呢
正在查找怎么使用
路过这里支持一下
2008-6-25 2:16 pm
谢了。
我用屏蔽功能,把.com替换成。com这个效果也还不错。
2008-6-25 8:39 pm
seo土坷垃:不客气,发现你的博客很不错!
2008-7-19 11:33 am
那些链接真的很讨厌
谢了