问题 在Play 2.0视图中转义JavaScript字符串?


有没有一种简单的方法来转义字符串,以便在Play 2.0的视图中用作JavaScript字符串?例如,这是一个简单的视图,在onclick中创建一个带有确认框的链接:

@(text:String,link:Call,message:String)
<a href="@link" onclick="return confirm('@message');">@text</a>

如果消息中有换行符或单引号,则会失败。最好的方法是什么?


4572
2018-03-16 19:38


起源



答案:


您可以使用Apache Commons Lang:

@(text:String, link:Call, message:String)

@import org.apache.commons.lang3.StringEscapeUtils.escapeEcmaScript
<a href="@link" onclick="return confirm('@escapeEcmaScript(message)');">@text</a>

您可以通过将模板添加到模板中来避免模板中的显式导入 project/Build.scala 文件:

templatesImport += "org.apache.commons.lang3.StringEscapeUtils.escapeEcmaScript"

13
2018-03-17 09:29



谢谢你的解决方案。 :)我正在使用Play 2.1和默认包含库 apache-commons-lang3。我补充道 org.apache.commons.lang3.StringEscapeUtils.escapeEcmaScript 至 Build.scala 和使用 escapeEcmaScript 在我的模板而不是 escapeJavaScript - Umut Benzer
好的,我编辑了我的答案。 - Julien Richard-Foy
是否可以将其与之结合起来 play的html逃脱 @Html(message) ? @escapeEcmaScript(Html(message))  - 不起作用 - Dfr
这不是一个好主意,因为它会打开一个XSS漏洞。为什么需要这个? - Julien Richard-Foy


答案:


您可以使用Apache Commons Lang:

@(text:String, link:Call, message:String)

@import org.apache.commons.lang3.StringEscapeUtils.escapeEcmaScript
<a href="@link" onclick="return confirm('@escapeEcmaScript(message)');">@text</a>

您可以通过将模板添加到模板中来避免模板中的显式导入 project/Build.scala 文件:

templatesImport += "org.apache.commons.lang3.StringEscapeUtils.escapeEcmaScript"

13
2018-03-17 09:29



谢谢你的解决方案。 :)我正在使用Play 2.1和默认包含库 apache-commons-lang3。我补充道 org.apache.commons.lang3.StringEscapeUtils.escapeEcmaScript 至 Build.scala 和使用 escapeEcmaScript 在我的模板而不是 escapeJavaScript - Umut Benzer
好的,我编辑了我的答案。 - Julien Richard-Foy
是否可以将其与之结合起来 play的html逃脱 @Html(message) ? @escapeEcmaScript(Html(message))  - 不起作用 - Dfr
这不是一个好主意,因为它会打开一个XSS漏洞。为什么需要这个? - Julien Richard-Foy