日期:2014-05-16  浏览次数:20451 次

javascript特殊字符转换
javascript特殊字符转换 
Posted on 2007-10-18 11:53 hilor 阅读(1209) 评论(1)  编辑  收藏 所属分类: 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>