VelocityEngine从字符串中删除转义字符

时间:2019-02-06 12:21:40

标签: java escaping velocity

当我打电话时:

velocityEngine.evaluate(velocityContext, writer, "", template);

with parameter.querystring = {"hi": "\"hello\""}

评估后的writer包含{"hi": ""hello""}

问题:

  • 为什么Velocity会删除转义字符?
  • 如何防止删除转义字符?

1 个答案:

答案 0 :(得分:2)

注意:我不了解VelocityEngine,所以要加一点盐。

  

为什么Velocity会删除转义字符?

最有可能的VelocityEngine读取parameter.querystring JSON中的值作为单个String。因此,字符串"\"hello\""被读为文本"hello"。然后在编写器中稍后,它只是将该字符串直接粘贴回原处。

我个人认为这是编写者源代码中的一个缺陷,在插入之前,它应该已经使用Pattern.quote(String)行中的某些内容来转义所有字符。

  

如何防止删除转义字符?

可以手动添加其他转义的\作为写作者行为的解决方法。这样您的parameter.querystring将会变成:

{"hi": "\\\"hello\\\""}

基本上是文本\"hello\",其中\"字符都被转义,并附加了一个\以将其放入Java字符串中。