日期:2014-05-16 浏览次数:20482 次
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>