js赋值时特殊字符完美处理方案

解决方案:

1、建立WEB-INF/tags/format/enter.tag文件,其文件内容如下: 
01 	<%@ tag body-content="scriptless" pageEncoding="utf-8" %><%@ attribute name="value" type="java.lang.String" required="true"%><%
02 	    if(value != null) {
03 	        int lengthh = value.length();
04 	        StringBuffer filtered = new StringBuffer(lengthh);
05 	        char prevChar = '\u0000';
06 	        char c;
07 	        for (int i = 0; i < lengthh; i++) {
08 	            c = value.charAt(i);
09 	            if (c == '"') {
10 	                filtered.append("\\\"");
11 	            } else if (c == '\'') {
12 	                filtered.append("\\'");
13 	            } else if (c == '\\') {
14 	                filtered.append("\\\\");
15 	            } else if (c == '\t') {
16 	                filtered.append("\\t");
17 	            } else if (c == '\n') {
18 	                if (prevChar != '\r') {
19 	                    filtered.append("\\n");
20 	                }
21 	            } else if (c == '\r') {
22 	                filtered.append("\\n");
23 	            } else if (c == '\f') {
24 	                filtered.append("\\f");
25 	            } else if (c == '/') {
26 	                filtered.append("\\/");
27 	            } else {
28 	                filtered.append(c);
29 	            }
30 	            prevChar = c;
31 	        }
32 	        value = String.valueOf(filtered);
33 	    }  
34 	    out.print(value);
35 	%>

2、页面运用,代码示例如下: 
01 	<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
02 	<%@ taglib tagdir="/WEB-INF/tags/format" prefix="format" %>
03 	 
04 	<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
05 	<html>
06 	  <head>
07 	    <title></title>
08 	     
09 	    <meta http-equiv="pragma" content="no-cache">
10 	    <meta http-equiv="cache-control" content="no-cache">
11 	    <script type="text/javascript">
12 	    function doTest() {
13 	        //var testValue = '${valueFromJava }';// 这种复制若valueFromJava中含有特殊字符,此时会报错
14 	        var testValue = '<format:enter value="${s.content }" />';// 这种处理就……
15 	    }
16 	    </script>
17 	  </head>
18 	   
19 	  <body>
20 	     
21 	  </body>
22 	</html>

注:js中的特殊字符有:

转义序列 	字符
\b 	退格
\f 	走纸换页
\n 	换行
\r 	回车
\t 	横向跳格 (Ctrl-I)
\' 	单引号
\" 	双引号
\\ 	反斜杠

解决方案:

1、建立WEB-INF/tags/format/enter.tag文件,其文件内容如下: 
01 	<%@ tag body-content="scriptless" pageEncoding="utf-8" %><%@ attribute name="value" type="java.lang.String" required="true"%><%
02 	    if(value != null) {
03 	        int lengthh = value.length();
04 	        StringBuffer filtered = new StringBuffer(lengthh);
05 	        char prevChar = '\u0000';
06 	        char c;
07 	        for (int i = 0; i < lengthh; i++) {
08 	            c = value.charAt(i);
09 	            if (c == '"') {
10 	                filtered.append("\\\"");
11 	            } else if (c == '\'') {
12 	                filtered.append("\\'");
13 	            } else if (c == '\\') {
14 	                filtered.append("\\\\");
15 	            } else if (c == '\t') {
16 	                filtered.append("\\t");
17 	            } else if (c == '\n') {
18 	                if (prevChar != '\r') {
19 	                    filtered.append("\\n");
20 	                }
21 	            } else if (c == '\r') {
22 	                filtered.append("\\n");
23 	            } else if (c == '\f') {
24 	                filtered.append("\\f");
25 	            } else if (c == '/') {
26 	                filtered.append("\\/");
27 	            } else {
28 	                filtered.append(c);
29 	            }
30 	            prevChar = c;
31 	        }
32 	        value = String.valueOf(filtered);
33 	    }  
34 	    out.print(value);
35 	%>

2、页面运用,代码示例如下: 
01 	<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
02 	<%@ taglib tagdir="/WEB-INF/tags/format" prefix="format" %>
03 	 
04 	<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
05 	<html>
06 	  <head>
07 	    <title></title>
08 	     
09 	    <meta http-equiv="pragma" content="no-cache">
10 	    <meta http-equiv="cache-control" content="no-cache">
11 	    <script type="text/javascript">
12 	    function doTest() {
13 	        //var testValue = '${valueFromJava }';// 这种复制若valueFromJava中含有特殊字符,此时会报错
14 	        var testValue = '<format:enter value="${s.content }" />';// 这种处理就……
15 	    }
16 	    </script>
17 	  </head>
18 	   
19 	  <body>
20 	     
21 	  </body>
22 	</html>

注:js中的特殊字符有:

转义序列 	字符
\b 	退格
\f 	走纸换页
\n 	换行
\r 	回车
\t 	横向跳格 (Ctrl-I)
\' 	单引号
\" 	双引号
\\ 	反斜杠

转载于:https://my.oschina.net/u/140625/blog/59278

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值