对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中需要转义的有:
此外,对/符号我觉得也有必要进行处理,因为象 --></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>
作者: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) |
/' | 单引号 |
/" | 双引号 |
// | 反斜杠 |
下面提供一个比较实用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>
相关文章推荐
- 用Javascript(js)进行HTML转义工具(处理特殊字符显示)
- 用Javascript(js)进行HTML转义工具(处理特殊字符显示)
- java防SQL注入,HTML 特殊字符,JavaScript 特殊字符,SQL 特殊字符 处理
- 字符串内特殊字符在html_javascript_xml等内使用时的转换 ,"缺少十六进制数字"错误的处理
- Jsp以get方式提交中文及特殊字符,javascript处理乱码问题
- php, html, javascript, mysql 之间的特殊字符处理
- Javascript URL中参数包含特殊字符的处理
- 用javascript处理特殊字符的问题
- JavaScript处理html特殊字符
- 用Javascript(js)进行HTML转义工具(处理特殊字符显示)
- json 特殊字符 javascript 特殊字符处理(转载)
- Javascript转义字符串中的特殊字符处理
- javascript处理url特殊字符总结
- js:使用JSON.stringify的时候,对\n等特殊字符的处理
- json字符串中的特殊字符处理
- XML 特殊字符的处理
- http请求中对特殊字符的处理,以及xml中对特殊字符的处理
- sql语言特殊字符处理
- SQL Server查询中的特殊字符处理
- SQL查询中的特殊字符的处理