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;
  }

 

posted @ 2014-02-28 09:31  魔豆  阅读(2018)  评论(0编辑  收藏  举报