我要啦免费统计

微蓝领域

我的学习档案馆
posts - 19, comments - 57, trackbacks - 0, articles - 57
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

javascript特殊字符转换

Posted on 2007-10-18 11:53 hilor 阅读(3989) 评论(0)  编辑  收藏 所属分类: common
javascript和JAVA一样,一些特殊字符需要转义
 
特别是在一些JSP网页的开发中,好多程序员经常会忘掉这点,
例:
1 <% List textList = (List)request.getAttribute("textList"); %>
2 <script>
3 <!--
4 var txtList = new Array();
5 <% for ( int i = 0 ; i < textList.size() ; i++) { %>
6 txtList[<%=i%>= "<%=textList.get(i)%>";
7 <% } %>
8 -->
9 </script>
 
这段JS就存在问题,未对特殊符号进行处理.有特殊符号的情况下有可能报JSERROR
 
JAVASCRIPT中需要转义的有:
 
转义序列 字符
\b 退格
\f 走纸换页
\n 换行
\r 回车
\t 横向跳格 (Ctrl-I)
\' 单引号
\" 双引号
\\ 反斜杠

此外,对/符号我觉得也有必要进行处理,因为象 --></script> 这样的字符串也会使SCRIPT出错.
 
下面提供一个比较实用java的方法,做这个特殊符号的处理:
 1public class JavaScriptUtils {
 2 public static String javaScriptEscape(String input) {
 3  if (input == null{
 4   return input;
 5  }

 6  StringBuffer filtered = new StringBuffer(input.length());
 7  char prevChar = '\u0000';
 8  char c;
 9  for (int i = 0; i < input.length(); i++{
10   c = input.charAt(i);
11   if (c == '"'{
12    filtered.append("\\\"");
13   }

14   else if (c == '\'') {
15    filtered.append("\\'");
16   }

17   else if (c == '\\'{
18    filtered.append("\\\\");
19   }

20   else if (c == '\t'{
21    filtered.append("\\t");
22   }

23   else if (c == '\n'{
24    if (prevChar != '\r'{
25     filtered.append("\\n");
26    }

27   }

28   else if (c == '\r'{
29    filtered.append("\\n");
30   }
 else if (c == '\f'{
31                filtered.append("\\f");
32  }
 else if (c == '/'{
33                filtered.append("\\/");
34            }

35   else {
36    filtered.append(c);
37   }

38   prevChar = c;
39  }

40  return filtered.toString();
41 }

42}
43


上面的例子应改为:
1 <% List textList = (List)request.getAttribute("textList"); %>
2 <script>
3 <!--
4 var txtList = new Array();
5 <% for ( int i = 0 ; i < textList.size() ; i++) { %>
6 txtList[<%=i%>= "<%=JavaScriptUtils.javaScriptEscape(textList.get(i))%>";
7 <% } %>
8 -->
9 </script>

只有注册用户登录后才能发表评论。


网站导航: