[英]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.