当前位置: 首页 > 图文教程 > 网络编程 > ASP > 用Regular Expression来改变HTML代码

ASP
ASP调用ORACLE存储过程并返回结果集
用ASP实现网页BBS
关于Global.asa文件的深入研究与session变量失效提示的具体方法
简易ASP+注册系统
防护手册:如何防止ASP木马在服务器上运行
用Visual Basic实现多画面播放功能之二
如何增强ASP程序性能(1)
如何增强ASP程序性能(2)
如何增强ASP程序性能(3)
ASP备份数据库
二十八条改善 ASP 性能和外观的技巧
在Form域中Post大于100K的数据
如何使用ASP制作模似动态生长的表单?
Microsoft IIS 真的如此「不安全」吗?(1)
Microsoft IIS 真的如此「不安全」吗?(2)
Microsoft IIS 真的如此「不安全」吗?(3)
Microsoft IIS 真的如此「不安全」吗?(4)
Microsoft IIS 真的如此「不安全」吗?(5)
关于页面和代码分离
ServerVariables 对路径的操作

ASP 中的 用Regular Expression来改变HTML代码


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-11-03   浏览: 32 ::
收藏到网摘: n/a

       我最近在为一个客户开发在线论坛程序,我想把用户发言中的url或e-mail地址用超链接显示出来. 用JavaScript的regular expressions是最容易实现的.
  
  用户在表单里的多行文本框中输入他们的发言内容,然后把消息送到论坛的用户发言区中,然而,在把消息在论坛里显示出来之前,我要调用一个函数来处理消息,对url动些手脚.
  
  我不想在这里讨论如何从数据库里取得一条记录了,这个站点已经说得很透彻了. 我们假设用户的消息文本存放在数据库中,并被赋予了一个叫s_message的变量.
  
  <%
  
  '...start the page and spit out html to the browser
  
  'call the function to convert the message
  Response.Write to_html(s_message)
  
  %>
  
  函数如下:
  
  
  <%
  Function to_html(s_string)
  
  to_html = Replace(s_string, """", """)
  to_html = Replace(to_html, "<", "<")
  to_html = Replace(to_html, ">", ">")
  to_html = Replace(to_html, vbcrlf, "
  ")
  to_html = Replace(to_html, "/<", "<")
  to_html = Replace(to_html, "/>", ">")
  to_html = edit_hrefs(to_html)
  
  End Function
  %>
  
  <script language="javascript1.2" runat=server>
  function edit_hrefs(s_html){
  
  // use regular expressions to look for
  // e_mail addresses and urls
  s_str = new String(s_html);
  
  s_str = s_str.replace(/\bhttp\:\/\/www(\.[\w+\.\:\/\_]+)/gi,
  "http\:\/\/?¤?$1");
  
  s_str = s_str.replace(/\b(http\:\/\/\w+\.[\w+\.\:\/\_]+)/gi,
  "<a href=\"$1\">$1<\/a>" target=_blank);
  
  s_str = s_str.replace(/\b(www\.[\w+\.\:\/\_]+)/gi,
  "<a href=\"http://$1\">$1</a>" target=_blank);
  
  s_str = s_str.replace(/\bhttp\:\/\/?¤?(\.[\w+\.\:\/\_]+)/gi,
  "<a href=\"http\:\/\/www$1\">http\:\/\/www$1</a>" target=_blank);
  
  s_str = s_str.replace(/\b(\w+@[\w+\.?]*)/gi,
  "<a href=\"mailto\:$1\">$1</a>" target=_blank);
  
  
  return s_str;
  
  }
  </script>
  
  上面的代码做了这些事儿:
  
  1. 把引号转换成"这样的html元素. 这不是必需的,但最好这么做.
  
  2. 把小于号转换成html元素<. 这样的话,如果有人在发的消息里用到了小于
  号,html会正确输出. 另外,也防止某些人耍小花招,比如用<b>bold</b>来特定的字以粗体显示.
  
  3. 把大于号转换成>. 原因同上.
  
  4. 把回车换行转换成html换行标签"
  "
  
  5. 这就是我们要动的手脚. 它允许人们在代码里放入简单的html并逃脱代码的转换. 然而,他们得用"/"来避开对"<>"的代码检查. 我想总会有人找出绕过代码转换的办法的,如果他们办到了,用"牛"来形容他们的水平是再恰当不过的了.
  
  6. 最后,调用JavaScript的edit_hrefs的函数.
  
  现在,让我们来看看每行的JavaScript的函数做了些甚麽:
  
  1. 为传递函数的参数创建一个字符串对象.
  
  2. 把所有的http://www.[something]找出来,转换成http:////?¤?.
  [something]. 这是一个临时性的措施,处理所有的www.[something]. 因此
  http://www.pinarello.com/被替换成http://?¤?.pinarello.com/.
  
  3. 转换其余的http://[something],有些网址是不以www开头的. 比如
  http://uk.imdb.com/将被转换为<a
  href="http://uk.imdb.com/">http://uk.imdb.com/</a>
  
  4. 寻找所有