在Play框架中逃避引号的适当位置在哪里?

时间:2012-06-07 08:53:59

标签: playframework escaping playframework-1.x

我有以下流程:

  1. 向用户显示表单。
  2. 他填写表单字段,然后提交给控制器,控制器将其持久保存到数据库
  3. 在另一页上,Controller从DB获取此记录,并将其传递给视图
  4. 该视图将其捕获为javascript变量:var foo = '${user.bar}';
  5. 现在,如果用户以下列形式输入此字符串:

    I have a quote - ' - very dangerous
    

    然后引号一直传递到数据库并返回,并导致损坏的 javascript语句:

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

    逃避这个角色的最佳位置是什么?以及如何?我不想手动为每个模板使用它,这很乏味且容易出错。

1 个答案:

答案 0 :(得分:4)

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

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