在速度中转义双引号

Escape double quote in velocity

我使用的是 velocity 1.7,模板如下。

var jsCode = "${code}";
eval(jsCode);

如果代码是"var id = 123",那么实际的js代码是

var jsCode = "var id = 123";
eval(jsCode);

没有问题。

但是,如果代码是"var name = "lucy"",那么实际的js代码是

var jsCode = "var name = "lucy"";
eval(jsCode);

显然有语法错误。

而如果代码是var jsonStr = "{\"id\":1, \"name\":\"lucy\"}",问题就更严重了

代码未知,可以是任何内容。

如何解决这个问题?

Velocity 也在 velocity-tools 项目中开发 EscapeTool,它使用不同的选项转义

Tool for working with escaping in Velocity templates. It provides methods to escape outputs for Velocity, Java, JavaScript, HTML, HTTP, XML and SQL

你的情况是 javascript 所以使用 $esc.javascript( 例子:

$javascript -> He didn't say, "Stop!"

$esc.javascript($javascript) -> He didn\'t say, \"Stop!\"