繁体   English   中英

Apache Velocity:转义符不适用于PHP作为关联数组键

[英]Apache Velocity: Escape character not working for PHP as associative array key

我正在使用Velocity(1.7)生成PHP代码。

我以严格的理由设立了Velocity,这会有所帮助:

p.setProperty(RuntimeConstants.RUNTIME_REFERENCES_STRICT_ESCAPE, "true");

但是我在模板中的以下行遇到了问题:

\$result['${attribute.Name}'] = \$this->${attribute.Name};

输出为:

$result['${attribute.Name}'] = $this->color;

但是应该是:

$result['color'] = $this->color;

编辑:

我找到了解决问题的方法:

#set($d = "$")
${d}result['${attribute.Name}'] = \$this->${attribute.Name};

但是我不希望该解决方案引入一个附加变量,而只是为了解决Velocity中可能存在的错误。

在Velocity 1.7中, \\不再是转义字符。 渲染\\$result['${attribute.Name}']\\逐字打印,因为它不是Velocity语法字符,所以$result['${attribute.Name}']被识别为对象上的数组访问由$result变量引用,但是由于该变量后面没有数组,因此整个输出将逐字打印。 这就是Velocity的工作方式:被识别为有效的Velocity语法的任何东西,但不能求值或导致null ,都将被打印回输出中。

由于您要混合使用两种类似的语法,即Velocity和PHP,因此需要一种方法来将它们彼此分隔。 逃脱是正确的方法,但是\\$不是一个。 您必须使用变量来获取$符号。

推荐的方法是使用$escapetool.d转义工具,但这需要配置工具并且比${d}更长。

或者,您可以使用未解析的内容转义语法:

#[[$result[']]#${attribute.Name}#[['] = $this->]]#$attribute.Name

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM