首页 > 解决方案 > VelocityEngine 从字符串中删除转义字符

问题描述

当我打电话时:

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

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

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

问题:

标签: javaescapingvelocity

解决方案


注意:我不知道 VelocityEngine,所以对它持保留态度。

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

parameter.querystringVelocityEngine 很可能将JSON 中的值作为单独的字符串读取。所以 String"\"hello\""被读取为 text "hello"。然后稍后在编写器中,它只是将这个字符串按原样粘贴回来。

我个人认为这是作者源代码中的一个缺陷,它应该Pattern.quote(String)在插入之前使用类似的东西来转义所有字符。

如何防止删除转义字符?

\可以手动添加额外的转义符作为编写器行为的解决方法。所以你parameter.querystring会变成:

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

基本上是 text \"hello\",其中\"字符都被转义,并附\加到 java String 中。


推荐阅读