如何在JSP中的标记内的JS调用中转义引号和撇号

时间:2017-03-22 14:16:03

标签: javascript jsp

我有一个JSP,它获取一个存储在后端对象中的任意字符串;称之为$ {state.status.code}。

我希望在单击表格元素时将此字符串传递给函数;我正在使用onClick来调用我的JS函数showStatus。放在一起看起来像这样:

<c:set var="statusString" value="${state.status.code}" />
<td id="${rowId}"><a href="#" 
                   class="pClass" 
                   onClick="showStatus('${statusString}')>
                   Here be status
                  </a>

问题是statusString中可能有双引号或撇号,我无法弄清楚如何逃避它们。我一直在c:set标记中尝试各种各样的事情:fn:replace使用'和',StringEscapeUtils.escapeJavaScript(statusString)和fn:escapeXml(statusString)。这可能就是其中之一,但是我将它放在错误的地方,由错误的人物划定,或者只是没有正确地对待。

我总是可以用一些任意的唯一字符串(“!#$#!”)代替它们,然后当我在showStatus中显示HTML弹出窗口时替换它们,但这对于这样一个看似简单的问题来说似乎真的很难看。有没有人有更好的解决方案?

1 个答案:

答案 0 :(得分:0)

您可以尝试这种方式:

添加此依赖项

<dependency>
    <groupId>org.owasp.esapi</groupId>
    <artifactId>esapi</artifactId>
    <version>2.1.0.1</version>
</dependency>

并以这种方式将参数传递给你的javascript函数

onclick="showStatus('<c:out value="${esapi:encodeForJavaScript(statusString)}" />')"

并且为了使用esapi标记,您必须在jsp中包含以下内容

<%@ taglib uri="http://www.owasp.org/index.php/Category:OWASP_Enterprise_Security_API"prefix="esapi" %>

如果罐子丢失了 在META-INF目录中的esapi.tld,请在以下链接中阅读第一个答案: https://code.google.com/p/owasp-esapi-java/issues/detail?id=237

因为有一些步骤可以让它发挥作用。