【问题标题】:Where is the proper place to escape quotes in Play Framework?在 Play Framework 中转义引号的正确位置在哪里?
【发布时间】:2012-06-11 07:41:22
【问题描述】:

我有以下流程:

  1. 向用户展示了一个表单。
  2. 他填写表单字段,然后提交给控制器,控制器将其保存到数据库中
  3. 在另一个页面上,控制器从数据库中获取此记录,并将其传递给视图
  4. 视图将其捕获为 javascript 变量:var foo = '${user.bar}';

现在,如果用户在表单中输入这个字符串:

I have a quote - ' - very dangerous

然后引用一直传递到数据库并返回,并导致 corrupt javascript 语句:

var foo = 'I have a quote - ' - very dangerous';

逃离这个角色的最佳地点是什么?如何?我不想为每个模板的使用手动执行它,这很乏味且容易出错。

【问题讨论】:

标签: playframework escaping playframework-1.x


【解决方案1】:

数据就是数据。如果它包含一个报价,它就包含一个报价,并且它必须以这种方式存储在数据库中。使用此 String 为 JavaScript 字符串文字时,您需要转义引号。

您可以使用 Apache commons-lang StringEscapeUtils.escapeECMAScript() 方法来执行此操作,或者您可以将 Java 对象编码为 JSON 字符串,并在 JavaScript 代码中解析 JSON 字符串。

【讨论】:

  • 这种方法是不是既冗长又容易出错?这是我们目前最好的吗?
  • 顺便说一句,另请参阅我上面关于 java 扩展模块的评论。
  • 您到底希望得到什么?一个神奇的工具,它会知道你正在生成一个 JS 文字字符串,并且会神奇地为你逃避事情?生成 HTML 时,必须对字符串进行 html 转义。当你生成 JS 字符串时,你必须对你的字符串进行 JS 转义。
  • 当我生成 HTML 时,Play 会为我处理转义,不是吗?也许我希望的是另一个减少冗长的游戏运营商......$$user.foo$$。我想这可能现在不存在,甚至在第 3 方模块中也不存在。我暂时接受你的回答。
  • 默认进行 HTML 转义:stackoverflow.com/questions/5764679/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-26
  • 2014-08-22
  • 2014-09-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多