Playframework 在游戏框架中,哪里是转义引号的合适位置?
我有以下流程:Playframework 在游戏框架中,哪里是转义引号的合适位置?,playframework,escaping,playframework-1.x,Playframework,Escaping,Playframework 1.x,我有以下流程: 向用户显示一个表单 他填写表单字段,并提交给控制器,控制器将此信息保存到DB 在另一个页面上,控制器从DB获取该记录,并将其传递给视图 视图将其捕获为javascript变量:var foo='${user.bar}' 现在,如果用户以以下形式输入此字符串: I have a quote - ' - very dangerous 然后,引号会一直传递到DB并返回,并导致损坏的javascript语句: var foo = 'I have a quote - ' - very d
var foo='${user.bar}'代码>
I have a quote - ' - very dangerous
然后,引号会一直传递到DB并返回,并导致损坏的javascript语句:
var foo = 'I have a quote - ' - very dangerous';
逃离这个角色的最佳地点是什么?如何逃离?我不想在每次使用模板时都手动执行此操作,这既繁琐又容易出错。数据就是数据。如果它包含一个引号,它就包含一个引号,并且必须以这种方式存储在数据库中。使用此字符串时需要转义引号
您可以使用Apache commons lang
StringEscapeUtils.EscapeeCmacScript()
方法来完成此操作,或者您可以将Java对象编码为JSON字符串,并在JavaScript代码中解析JSON字符串。我刚刚找到Java扩展模块。这真的是我们能做的最好的了吗?使用这个${user.bar.addSlashes().raw()}
?它相当冗长而且容易出错。如果您使用的是Ryth模板引擎,那么它可能是var foo='@user.bar.escapeJavaScript()代码>。查看有关Ryth模板引擎的更多信息此方法不是既冗长又容易出错吗?这是我们现在所拥有的最好的吗?顺便说一句,请参阅我上面关于java扩展模块的评论。你到底希望得到什么?这是一个神奇的工具,它会知道您正在生成一个JS文本字符串,并且会神奇地为您转义?生成HTML时,必须对字符串进行HTML转义。当您生成JS字符串时,必须对字符串进行JS转义。当我生成HTML时,Play为我处理转义,不是吗?也许我所希望的是另一个播放操作员来减少冗长的内容<代码>$$user.foo$$
。我想这可能现在不存在,甚至在第三方模块中也不存在。我现在接受你的答案。默认情况下不会: