我知道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错误控制台复制了上述错误声明。
答案 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()
函数),但这更复杂。