现在的位置: 首页 > 综合 > 正文

velocity 单引号和双引号转义

2017年11月14日 ⁄ 综合 ⁄ 共 1331字 ⁄ 字号 评论关闭

        默认情况下, velocity 通过 #set($var=...)  为变量赋值时,如果等号右侧是用双引号引起来的字符串,则会对字符串中的变量进行解析,如:

#set($var1 = "test1")

#set($var2 = "test2_$var1")

$var2  将输出 test2_test1

如果是用单引号引起来的,则不会对引号中的变量进行解析,而是直接原样输出,上面的 $var2 将输出
test2_$var1

        网上有资料说“默认情况下,使用单引号来渲染未解析文本在Velocity是有效的。这种特征可以通过编辑velocity.properties 中的 stringliterals.interpolate=false来改变。” 但自己经过测试后,发现该设置并没生效(不管值为 false 还是 true,效果都是一样的)。

        现在有这么一种情况,我要赋给 $var2 的值既有单引号,又有双引号,还有需要进行解析的变量,这时候应该怎么处理呢?尝试着使用“\”对单引号和双引号进行转义,发现“\”并不能对引号进行转义,“\”只对 $、# 生效。

#set($var2 = "test'2"_$var1")    -->   org.apache.velocity.runtime.parser.ParseException: Encountered "_" at line 6, column 22.

#set($var2 = "test'2\"_$var1")    -->   org.apache.velocity.runtime.parser.ParseException: Encountered "_" at line 7, column 23.

#set($var2 = 'test'2"_$var1')    -->     org.apache.velocity.runtime.parser.ParseException: Encountered "2" at line 8, column 20.

#set($var2 = 'test\'2"_$var1')    -->     org.apache.velocity.runtime.parser.ParseException: Encountered "2" at line 9, column 21.

通过以上四种尝试均未达到预期效果(期望值是 $var2 的输出结果为 test'2"_test1

        仍然没有达到效果,所以继续进行各种尝试,最终终于知道怎么对单引号和双引号进行转义了:

(1)最外层是用单引号包围时,双引号直接使用就可以了,两个连续的单引号表示一个单引号:#set($var2 = 'A"B''C') --> $var2 的值为
A"B'C

(2)最外层是用双引号包围时,单引号直接使用就可以了,两个连续的双引号表示一个双引号:#set($var2 = "A""B'C") --> $var2 的值为
A"B'C

(3)字符串中的变量需要被解析,则最外层用双引号包围:#set($var2 = "A""B'C_$var1") --> $var2 的值为
A"B'C_test1

(4)字符串中的变量不能被解析,则最外层用单引号包围:#set($var2 = 'A"B''C_$var1') --> $var2 的值为
A"B'C__$var1

抱歉!评论已关闭.