velocity 单引号和双引号转义

        默认情况下, 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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值