JSP学习笔记(一百二十五):javascript中引用java变量出现换行符等会报错的解决方法

源文地址:http://www.cnblogs.com/modou/articles/3572874.html

有这么一种实际情况,就是在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;
  }
复制代码

猜你喜欢

转载自chenjinbo1983.iteye.com/blog/2285647
今日推荐