日期:2010-04-16  浏览次数:20835 次

  简 介
  这篇东西是我在开发TOL8.COM讨论组的时候学会的,涉及的内容比较多,所以不适合初级用户,他的目的就是让论坛可以发表规则的HTML或者Script原代码到文本框内,用户点击后就能看到运行效果,这对讨论技术的站点是很有必要的!

  正 文
  要看效果请先打开这个网址http://www.TOL8.com/pages/pages.asp?id=76
  首先如果你是为利用ASP开发项目的,你肯定会做过一些管理新闻发布系统,或者BBS之类的东西,遇到一些发表源文件的地方,为了安全我们不得不做一些代码转换。
  比如:tbStr = Replace(tbStr,"<","<")这就是将tbStr的那些输出后会影响页面的标签替换掉,当然实际的操作过程比我现在说的要复杂得多了! 下面就按照我自己的方法给大家介绍今天的内容,理解后就可以运用自如了!
<%
Function TOL8HTML(tbStr)
Dim result, l, CODETXT
if isNULL(tbStr) then
TOL8HTML=""
exit function
end if
l=len(tbStr)
result=""
CODETXT = ""
Dim i
For i = 1 to l

if Right(result,6) = "
以下内容为程序代码 以下内容为程序代码
" then
result = result
CODETXT = CODETXT + Mid(tbStr,i,1)
if Right(CODETXT,7) = "
" then
result = result + CODETXT
end if
else


Select Case mid(tbstr,i,1)
Case "<"
result=result+"<"
Case ">"
result=result+">"
Case chr(13)
result = result + "<br>"
Case chr(34)
result=result+"""
Case "&"
result=result+"&"
Case chr(32)
if i+1<=l and i-1>0 then
if mid(tbStr,i+1,1)=chr(32) or mid(tbStr,i+1,1)=chr(9) or mid(tbStr,i-1,1)=chr(32) or mid(tbStr,i-1,1)=chr(9) then
result=result+" "
else
result=result+" "
end if
else
result=result+" "
end if
case chr(9)
result=result+" "
case else
result=result+mid(tbStr,i,1)
End Select
end if
next
TOL8HTML = result
End Function
%>
  开发过论坛的朋友一眼就能看出上面这段代码是很典型的将HTML标记转换为安全字符的函数,调用的时候假如变量是strs, 方法就是 strs=TOL8HTML(strs)
  只不过我加多了一段红色的代码部分这既是在论坛有调用源代码标签的提示后不执行下面的转换!如果你认为多余可以去掉试试,我也就不多说了, 随后我们还需要建立一个函数
<%
Function TOL8UBB
Dim CODE1, CODE2
CODE1 = "<table align=center width=""98%"""&_
" border=0 cellpadding=2 cellspacing=2><tr>"&_
"<td class=blank_2>表格内为可运行程序代码:"&_
"</td></tr><tr><td>"&_
" <TEXTAREA rows=12 cols=80 >"
CODE2 = "</TEXTAREA><BR>  "&_
"<INPUT onclick=runCode() type=button"&_
" value=运行代码>"&_
"</td></tr><tr><td></td></tr></table>"
if Instr(tbStr,"
以下内容为程序代码 以下内容为程序代码
") > 0 and Instr(tbStr,"
") > 0 then
tbStr = Replace(tbStr,"
以下内容为程序代码 以下内容为程序代码
",CODE1)
tbStr = Replace(tbStr,"
",CODE2)
end if
end Function
%>
  这就是当前台页面数据输出准备调用之间源代码的时候我们需要做的一些替换,以上两断代码建议存储在一个ASP页面内,我们这里把他们保存为TOL8UBB.asp!
  以上两个都完成了,我们该看看访客们要浏览时的页面lookPage.asp如何设计了,细心的朋友会发现第二段代码中再作替换的时候有个按钮加了一个JS函数的调用动作,而这个函数在哪里呢,当然就在这个lookPage.asp页面里了呀!我们先用include来将TOL8UBB.ASP包含进来然后加入下面这段JS
<Script>
function runCode() //本段JS来自经典论坛
{
var code=event.srcElement.parentElement.children[0].value;//即要运行的代码。
var newwin=window.open('','',''); //打开一个窗口并赋给变量newwin。
newwin.opener = null // 防止代码对论谈页面修改
newwin.document.write(code); //向这个打开的窗口中写入代码code,这样就实现了运行代码功能。
newwin.document.close();
}
</Script>
  最后在你把数据输出的时候先这里调用两个已经设计好了的函数如
strs = TOL8HTML(strs)
strs = TOL8UBB(strs)
Response.Write strs
  就OK了……这东西是经过我反复实践才做出来的,其中还是有很不理想的地方,如果高手们你们能看出来或者直接就解决了,不要忘记和大家分享!