分享

解决动网论坛最后发表显示代码的问题(或导致首页排版错乱)

 山不转水转转 2012-03-20

动网论坛作为一个优秀的ASP论坛程序,两年前曾是千千万万站长的选择。虽然动网论坛官方停止了更新,但是由于我一个站用的是动网论坛,转换的话闲麻烦,而且之前做了不少个性化修改,再者我用着感觉也挺快的,也能够解决需要(毕竟也是一个曾经优化的论坛程序),所以就不打算更换了。

但是动网论坛(V7.1)程序有一个bug,就是首页每个版块的最后发表处经常显示一些UBB代码出来,近日更发现首页排版错乱,查了原因居然是一段最后发表处的没显示完整的带有引号的HTML代码所致。

通过一番查找,根源在于论坛在过滤最后发表的帖子(回复或主题的标题)内容时对HTML代码的剔除存在漏洞,而且并没有进行UBB代码的剔除。找到了根源,于是动手解决起来就容易了。

1、优化剔除HTML标记的Function

打开论坛根目录 inc/Dv_ClsMain.asp 这个文件,查找 Public Function Replacehtml(Textstr) ,把整个Function(如下代码)替换成我优化后的Function.

 '去掉HTML标记
 Public Function Replacehtml(Textstr)
  Dim Str,re
  Str=Textstr
  Set re=new RegExp
   re.IgnoreCase =True
   re.Global=True
   re.Pattern="<(.[^>]*)>"
   Str=re.Replace(Str, "")
   Set Re=Nothing
   Replacehtml=Str
 End Function

优化后的代码:

  '去掉HTML标记
Public Function Replacehtml(Textstr)
  Dim Str,re
  Str=Textstr
  Set re=new RegExp
   re.IgnoreCase =True
   re.Global=True
   re.Pattern="<(.[^>]*)>"
   Str=re.Replace(Str, "")
   '风清扬添加2行 去掉不完整的HTML标记 < > 和 引号
   re.Pattern="<(.[^>]*)"
   Str=re.Replace(Str, "...")
   re.Pattern="[<>""\']"
   Str=re.Replace(Str, "")
   Set Re=Nothing
   Replacehtml=Str
 End Function

 2、添加一个新的Function用于剔除UBB代码

在第一步Function的后面添加一个Function,用于剔除UBB代码,源代码如下,直接复制过去就行了,不过注意不要放在Function与End Function之间了。

 '风清扬添加 去掉以[ ]表示的UBB论坛代码
 Public Function ReplaceUbb(Textstr)
  Dim Str,re
  Str=Textstr
  Set re=new RegExp
   re.IgnoreCase =True
   re.Global=True
   re.Pattern="\[(.[^>]*)\]"
   Str=re.Replace(Str, "")
   re.Pattern="\[(.[^\]]*)"
   Str=re.Replace(Str, "...")
   re.Pattern="[\[\]]"
   Str=re.Replace(Str, "")
   Set Re=Nothing
   ReplaceUbb=Str
 End Function

3、修改admin_posting.asp文件

打开论坛根目录的 admin_posting.asp 文件 ,查找

Lasttopic=replace(left(Dvbbs.Replacehtml(rs(0)),15),"$","")

替换成

Lasttopic=replace(left(Dvbbs.ReplaceUbb(Dvbbs.Replacehtml(rs(0))),15),"$","") '风清扬修改

这样修改以后,应该是以后发表贴子(回复或主题都行),该帖子所在的版块的最后发表处就会正常显示文字,而不会含有HTML或者UBB代码了。

4、修改后台重计论坛数据的文件,手动一次性修复所有版块的问题

打开 admin/Update.asp 文件,查找

LastPost=Replace(Dvbbs.Replacehtml(Trs(0)&""),"'","''")

替换成

LastPost=Replace(Dvbbs.ReplaceUbb(Dvbbs.Replacehtml(Trs(0))&""),"'","''")  '风清扬修改

改完后,进入动网论坛管理后台,依次找到论坛管理左侧菜单中的 论坛管理 》 重计论坛数据和修复,点击进入后,再在右边的窗口点击 更新分版面数据 按钮,大功告成!

后话:虽然现在很多人抛弃了动网论坛,要么用Discuz!,要么用Phpwind。我想说的是,任何程序都有优点,也都有缺点。运营一个网站,没有必要非得采用最流行的程序,更没有必要非得保持你的程序是最新版本。最新的并不一定是最好的,用得习惯顺手才是最好。再说,老是跟着官方去更新,很累!转换是个很麻烦的问题,更不用说你自己如果做了一些修改的话,兼容性又是一个很大的问题了。所以我觉得,够用就行,没有必要老是升级,除非确实需要新的功能,或者,闲得没事干!

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多