用Regular Expression来改变HTML代码

白羊lhhdiamond

白羊lhhdiamond

2016-01-29 19:45

用Regular Expression来改变HTML代码,用Regular Expression来改变HTML代码
       我最近在为一个客户开发在线论坛程序,我想把用户发言中的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. 寻找所有
展开更多 50%)
分享

猜你喜欢

用Regular Expression来改变HTML代码

ASP
用Regular Expression来改变HTML代码

正则表达式regular expression详述

电脑网络
正则表达式regular expression详述

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

正则表达式(regular expression)(1)

Web开发
正则表达式(regular expression)(1)

正则表达式(regular expression)(3)

Web开发
正则表达式(regular expression)(3)

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

正则表达式regular expression详述(二)

Web开发
正则表达式regular expression详述(二)

正则表达式regular expression详述(一)

Web开发
正则表达式regular expression详述(一)

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

如何给linux添加新硬盘

如何给linux添加新硬盘

读核日记(七) --linux的内存管理机制(1)

读核日记(七) --linux的内存管理机制(1)
下拉加载更多内容 ↓