源文地址:http://www.cnblogs.com/modou/articles/3572874.html 有这么一种实际情况,就是在javascript代码片段中引用java变量,比如: 一般情况下,这么使用是没有问题的,可是如果变量javastr1带有换行符,这段javascript就报错了,需要格式化javastr1。 如果项目中使用了struts2,可以使用freemarker现成的格式化方法: 如果项目中没有使用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;
}