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

我有以下流程:

  • 向用户显示一个表单
  • 他填写表单字段,并提交给控制器,控制器将此信息保存到DB
  • 在另一个页面上,控制器从DB获取该记录,并将其传递给视图
  • 视图将其捕获为javascript变量:
    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$$
    。我想这可能现在不存在,甚至在第三方模块中也不存在。我现在接受你的答案。默认情况下不会: