如何在JSP中将特殊字符传递给JavaScript ..?

时间:2011-03-09 13:24:06

标签: javascript jsp jstl

我知道javascript中的函数Escape(),JSTL中的escapeXml,我用了几种方法来解决这个问题,但没有得到解决方案。 问题是......

JSTL变量假设$ {str}的值为“system#with ^%$ /<”。

我将此值传递给javascript,因为OnClick =“special('$ {str}')”

我收到错误消息: -

Error: unterminated string literal Source File: http://localhost:8080/.. Line: 1, Column: 27 Source Code: special('system # with ^%$ / <

我无法将字符串本身传递给javaScript。

PS:我从mozilla错误控制台复制了上述错误声明。

1 个答案:

答案 0 :(得分:2)

听起来你需要在字符串中转义双单引号。我会使用您定义的函数执行此操作,而不是fn:replace(),因为引用有点粗糙。

最简单的方法是使用Apache StringEscapeUtils#escapeJavaScript()函数。

  

使用JavaScript字符串规则转义String中的字符。

     

将找到的任何值转义为JavaScript String表单。正确处理引号和控制字符(制表符,反斜杠,cr,ff等)

     

因此,标签变为字符'\\''t'

     

Java字符串和JavaScript字符串之间的唯一区别是,在JavaScript中,必须转义&gt;单引号。

     

示例:

input string: He didn't say, "Stop!"
output string: He didn\'t say, \"Stop!\"

所以你的servlet可以做到这一点:

request.setAttribute("str",
    StringEscapeUtils.escapeJavaScript("\"system # with ^%$ / <\""));

然后您的JSP可以只包含:

... onclick="'${str}'" ...

您也可以创建一个自定义EL函数来执行此操作(使用下面的相同escapeJavaScript()函数),但这更复杂。