velocity 單引號和雙引號轉義

2021-06-21 01:22:39 字數 1785 閱讀 8124

預設情況下, 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

單引號和雙引號

char p1 1 char p2 1 1 的ascii碼值為49 0和49位址處為作業系統使用,故訪問這些位址如printf s,s,s p1,p2,p3 會產生段錯誤。printf n n的ascii碼值為10,同理,段錯誤。a 表示字元常量,在記憶體中佔1個位元組,a 1表示 a 的ascii...

單引號( )和雙引號( )

關鍵是要養成良好的習慣.單引號 一般用在單字元,如 c 雙引號 一般用在字串,如 abc 如果巢狀使用的話,一般用交替方法,尤其是html中.如,也可以改成.在分割乙個字串時要用到str.split或者regex.split。簡單的單個字串的替換,直接用字串.split 單個字串 多個字串的替換用r...

mysql單引號 mysql單引號和雙引號

表名,列名最好用 esc下面那個,不用 會出錯 這就要從雙引號和單引號的作用講起 雙引號裡面的字段會經過編譯器解釋然後再當作html 輸出,但是單引號裡面的不需要解釋,直接輸出。例如 abc i love u echo abc 結果是 i love u echo abc 結果是 abc echo a...