您的位置:首页 > Web前端 > JavaScript

对javascript特殊字符的处理

2008-09-16 09:45 337 查看
对javascript特殊字符的处理
作者:eckel_cn

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的方法,做这个特殊符号的处理:

1



public 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>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: