【问题标题】:Escaping characters when passing jsp var to js function将jsp var传递给js函数时转义字符
【发布时间】:2012-03-15 18:28:27
【问题描述】:

假设我有一些 jsp var foo

<c:set var="foo" value="foo's bar"/>

我有以下js

<script>
 new SomeFunction('${foo}');
</script>

这显然会产生错误

missing ) after argument list

因为语句最终是

new SomeFunction('foo's bar');

但是,我不想只用双引号将参数 ${foo} 括起来,因为 foo 的值也可以在其字符串中包含一个双引号,这会导致同样的问题。假设 foo 可以是任何字符串。我只将它设置为 foo 的 bar,这样示例就很清楚了。目前,我正在解决这样的问题:

<script>
 new SomeFunction('<c:out value="${foo}"/>');
</script>

在 SomeFunction 内:

SomeFunction = new function(foo) {
  $(someSelector).text($("<div/>").html(foo).text());
}

这个解决方案似乎有效 - 假设我没有遗漏一些极端情况。但是,我不相信这是最好的解决方案。任何替代方案或改进建议?使用那个临时 div 对我来说似乎有点 hacky,我更喜欢不需要它的解决方案。

【问题讨论】:

标签: jquery jsp html-escape-characters


【解决方案1】:

如果您使用的是 Spring,则可以这样做。

new SomeFunction('<spring:escapeBody javaScriptEscape="true">${foo}</spring:escapeBody>');

【讨论】:

    【解决方案2】:

    使用Apache commons-lang StringEscapeUtils.escapeEcmaScript()(或自己重新实现)实现一个静态方法来转义特殊字符(单双引号、换行符、制表符),然后将此函数设为EL函数,并使用此EL函数从 JSP 内部:

    new SomeFunction('${myFn:escapeJs(foo)}');
    

    请参阅end of this page 了解如何创建 EL 函数。

    【讨论】:

      【解决方案3】:

      你可以在 c:out 中使用 escapeXml

       new SomeFunction('<c:out value="${foo}" escapeXml="true"/>');
      

      【讨论】:

      • 正如属性所说,&lt;c:out&gt; 转义 XML 特殊字符。它不会转义 JS 特殊字符。
      猜你喜欢
      • 1970-01-01
      • 2013-06-20
      • 1970-01-01
      • 2018-07-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-21
      • 1970-01-01
      相关资源
      最近更新 更多