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

 

转载于:https://www.cnblogs.com/modou/articles/3572874.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值