- 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>
javascript特殊符号
最新推荐文章于 2024-04-24 11:48:47 发布