月光疾风

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

引用的转义使用"\",指令的转义也是使用"\"。但是,指令的转义要比引用的转义复杂很多。例如:

 

#if($foo)
Go
!
#end

$foo为true,输出Go
!;否则不输出任何内容。

 

 

使用转义:

\#if( $foo )
Go
!
\#end


此时,
"\""#"结合,从而破坏了原本的#if(),而$foo作为判断条件,也不会被解析。
所以上面这段代码,无论$foo是true还是false,结果都是
#
if( $foo )
Go
!
#end
这类似于使用了#literal() ... #end指令。

 

 

 如果使用两个"\":

\\#if( $foo )
Go
!
\\#end


首先,#if前面的两个
假定$foo是true,那么会输出"Go!",并且是紧跟在刚才的"\"后面(因为没有
换号符)。#if($foo)和#end之间的内容,都会输出,包括#end前面的两个"\"
它们会被解析为一个"\"。如果$foo是false,仅仅输出一个"\",而"Go!"以
及后面下一行的"\"不会输出。
"\"结合,变为一个"\"输出。然后#if($foo)正常处理。

还有一种情况需要说明:

\\\#if($foo)
Go
!
\\#end


前两个"\"被解析为"\",第三个"\"和后面的"#"解析为"#",#if()被破坏。所以输出就是
 
\#if($foo)
Go
!
\......
注意最后那里,有一个合法的#end,但是它是多余的,所以这一段代码是会报错的。

 

posted on 2010-11-23 20:38  月光疾风  阅读(6333)  评论(0编辑  收藏  举报