JSP学习笔记(一百二十五):javascript中引用java变量出现换行符等会报错的解决方法
有这么一种实际情况,就是在javascript代码片段中引用java变量,比如:
<script type="text/javascript"> var str1 = "${javastr1}"; </script>
一般情况下,这么使用是没有问题的,可是如果变量javastr1带有换行符,这段javascript就报错了,需要格式化javastr1。
如果项目中使用了struts2,可以使用freemarker现成的格式化方法:
<s:bean name="freemarker.template.utility.StringUtil" id="stringUtil"/> <script type="text/javascript"> var str1 = "<s:property value="#stringUtil.javaScriptStringEnc(javastr1)" escapeHtml="false" />"; </script>
如果项目中没有使用struts2,新建一个javaScriptStringEnc方法即可,下面是freemarker里面的javaScriptStringEnc方法:
public static String javaScriptStringEnc(String s) { int ln = s.length(); for (int i = 0; i < ln; i++) { char c = s.charAt(i); if ((c == '"') || (c == '\'') || (c == '\\') || (c == '>') || (c < ' ')) { StringBuffer b = new StringBuffer(ln + 4); b.append(s.substring(0, i)); while (true) { if (c == '"') b.append("\\\""); else if (c == '\'') b.append("\\'"); else if (c == '\\') b.append("\\\\"); else if (c == '>') b.append("\\>"); else if (c < ' ') { if (c == '\n') { b.append("\\n"); } else if (c == '\r') { b.append("\\r"); } else if (c == '\f') { b.append("\\f"); } else if (c == '\b') { b.append("\\b"); } else if (c == '\t') { b.append("\\t"); } else { b.append("\\x"); int x = c / '\020'; b.append((char)(x < 10 ? x + 48 : x - 10 + 65)); x = c & 0xF; b.append((char)(x < 10 ? x + 48 : x - 10 + 65)); } } else { b.append(c); } i++; if (i >= ln) { return b.toString(); } c = s.charAt(i); } } } return s; }