mod 有点小问题,第103行
见下面代码<?php <br />
// +----------------------------------------------------------------------<br>
// | ThinkPHP [ WE CAN DO IT JUST THINK IT ]<br>
// +----------------------------------------------------------------------<br>
// | Copyright (c) 2006-2012 http://thinkphp.cn All rights reserved.<br>
// +----------------------------------------------------------------------<br>
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )<br>
// +----------------------------------------------------------------------<br>
// | Author: liu21st <liu21st><br>
// +----------------------------------------------------------------------<br>
<br>
defined('THINK_PATH') or exit();<br>
/**<br>
* CX标签库解析类<br>
* @category Think<br>
* @package Think<br>
* @subpackage Driver.Taglib<br>
* @author liu21st <liu21st><br>
*/<br>
class TagLibCx extends TagLib {<br>
<br>
// 标签定义<br>
protected $tags = array(<br>
// 标签定义: attr 属性列表 close 是否闭合(0 或者1 默认1) alias 标签别名 level 嵌套层次<br>
'php' => array(),<br>
'volist' => array('attr'=>'name,id,offset,length,key,mod','level'=>3,'alias'=>'iterate'),<br>
'foreach' => array('attr'=>'name,item,key','level'=>3),<br>
'if' => array('attr'=>'condition','level'=>2),<br>
'elseif' => array('attr'=>'condition','close'=>0),<br>
'else' => array('attr'=>'','close'=>0),<br>
'switch' => array('attr'=>'name','level'=>2),<br>
'case' => array('attr'=>'value,break'),<br>
'default' => array('attr'=>'','close'=>0),<br>
'compare' => array('attr'=>'name,value,type','level'=>3,'alias'=>'eq,equal,notequal,neq,gt,lt,egt,elt,heq,nheq'),<br>
'range' => array('attr'=>'name,value,type','level'=>3,'alias'=>'in,notin,between,notbetween'),<br>
'empty' => array('attr'=>'name','level'=>3),<br>
'notempty' => array('attr'=>'name','level'=>3),<br>
'present' => array('attr'=>'name','level'=>3),<br>
'notpresent'=> array('attr'=>'name','level'=>3),<br>
'defined' => array('attr'=>'name','level'=>3),<br>
'notdefined'=> array('attr'=>'name','level'=>3),<br>
'import' => array('attr'=>'file,href,type,value,basepath','close'=>0,'alias'=>'load,css,js'),<br>
'assign' => array('attr'=>'name,value','close'=>0),<br>
'define' => array('attr'=>'name,value','close'=>0),<br>
'for' => array('attr'=>'start,end,name,comparison,step', 'level'=>3),<br>
);<br>
<br>
/**<br>
* php标签解析<br>
* @access public<br>
* @param string $attr 标签属性<br>
* @param string $content 标签内容<br>
* @return string<br>
*/<br>
public function _php($attr,$content) {<br>
$parseStr = '<?php '.$content.' ?>';<br>
return $parseStr;<br>
}<br>
<br>
/**<br>
* volist标签解析 循环输出数据集<br>
* 格式:<br>
* <volist><br>
* {user.username}<br>
* {user.email}<br>
* </volist><br>
* @access public<br>
* @param string $attr 标签属性<br>
* @param string $content 标签内容<br>
* @return string|void<br>
*/<br>
public function _volist($attr,$content) {<br>
static $_iterateParseCache = array();<br>
//如果已经解析过,则直接返回变量值<br>
$cacheIterateId = md5($attr.$content);<br>
if(isset($_iterateParseCache[$cacheIterateId]))<br>
return $_iterateParseCache[$cacheIterateId];<br>
$tag = $this->parseXmlAttr($attr,'volist');<br>
$name = $tag['name'];<br>
$id = $tag['id'];<br>
$empty = isset($tag['empty'])?$tag['empty']:'';<br>
$key = !empty($tag['key'])?$tag['key']:'i';<br>
$mod = isset($tag['mod'])?$tag['mod']:'2';<br>
// 允许使用函数设定数据集 <volist>{$vo.name}</volist><br>
$parseStr = '<?php ';<br />
if(0===strpos($name,':')) {<br>
$parseStr .= '$_result='.substr($name,1).';';<br>
$name = '$_result';<br>
}else{<br>
$name = $this->autoBuildVar($name);<br>
}<br>
$parseStr .= 'if(is_array('.$name.')): $'.$key.' = 0;';<br>
if(isset($tag['length']) && '' !=$tag['length'] ) {<br>
$parseStr .= ' $__LIST__ = array_slice('.$name.','.$tag['offset'].','.$tag['length'].',true);';<br>
}elseif(isset($tag['offset']) && '' !=$tag['offset']){<br>
$parseStr .= ' $__LIST__ = array_slice('.$name.','.$tag['offset'].',null,true);';<br>
}else{<br>
$parseStr .= ' $__LIST__ = '.$name.';';<br>
}<br>
$parseStr .= 'if( count($__LIST__)==0 ) : echo "'.$empty.'" ;';<br>
$parseStr .= 'else: ';<br>
$parseStr .= 'foreach($__LIST__ as $key=>$'.$id.'): ';<br>
//改善后<br>
$parseStr .= '++$'.$key.';';<br>
$parseStr .= '$mod = ($'.$key.' % '.$mod.' );';<br>
$parseStr .= '?>';<br>
/*改善前<br>
$parseStr .= '$mod = ($'.$key.' % '.$mod.' );';<br>
$parseStr .= '++$'.$key.';?>';*/<br>
<br>
$parseStr .= $this->tpl->parse($content);<br>
$parseStr .= '<?php endforeach; endif; else: echo "'.$empty.'" ;endif; ?>';<br>
$_iterateParseCache[$cacheIterateId] = $parseStr;<br>
<br>
if(!empty($parseStr)) {<br>
return $parseStr;<br>
}<br>
return ;<br>
}<br>
<br>
/**<br>
* foreach标签解析 循环输出数据集<br>
* @access public<br>
* @param string $attr 标签属性<br>
* @param string $content 标签内容<br>
* @return string|void<br>
*/<br>
public function _foreach($attr,$content) {<br>
static $_iterateParseCache = array();<br>
//如果已经解析过,则直接返回变量值<br>
$cacheIterateId = md5($attr.$content);<br>
if(isset($_iterateParseCache[$cacheIterateId]))<br>
return $_iterateParseCache[$cacheIterateId];<br>
$tag = $this->parseXmlAttr($attr,'foreach');<br>
$name = $tag['name'];<br>
$item = $tag['item'];<br>
$key = !empty($tag['key'])?$tag['key']:'key';<br>
$name = $this->autoBuildVar($name);<br>
$parseStr = '<?php if(is_array('.$name.')): foreach('.$name.' as $'.$key.'=>$'.$item.'): ?>';<br>
$parseStr .= $this->tpl->parse($content);<br>
$parseStr .= '<?php endforeach; endif; ?>';<br>
$_iterateParseCache[$cacheIterateId] = $parseStr;<br>
if(!empty($parseStr)) {<br>
return $parseStr;<br>
}<br>
return ;<br>
}<br>
<br>
/**<br>
* if标签解析<br>
* 格式:<br>
* <if><br>
* <elseif></elseif><br>
* <else></else><br>
* </if><br>
* 表达式支持 eq neq gt egt lt elt == > >=
* @access public<br>
* @param string $attr 标签属性<br>
* @param string $content 标签内容<br>
* @return string<br>
*/<br>
public function _if($attr,$content) {<br>
$tag = $this->parseXmlAttr($attr,'if');<br>
$condition = $this->parseCondition($tag['condition']);<br>
$parseStr = '<?php if('.$condition.'): ?>'.$content.'<?php endif; ?>';<br>
return $parseStr;<br>
}<br>
<br>
/**<br>
* else标签解析<br>
* 格式:见if标签<br>
* @access public<br>
* @param string $attr 标签属性<br>
* @param string $content 标签内容<br>
* @return string<br>
*/<br>
public function _elseif($attr,$content) {<br>
$tag = $this->parseXmlAttr($attr,'elseif');<br>
$condition = $this->parseCondition($tag['condition']);<br>
$parseStr = '<?php elseif('.$condition.'): ?>';<br>
return $parseStr;<br>
}<br>
<br>
/**<br>
* else标签解析<br>
* @access public<br>
* @param string $attr 标签属性<br>
* @return string<br>
*/<br>
public function _else($attr) {<br>
$parseStr = '<?php else: ?>';<br>
return $parseStr;<br>
}<br>
<br>
/**<br>
* switch标签解析<br>
* 格式:<br>
* <switch><br>
* <case>1</case><br>
* <case>2</case><br>
* <default></default>other<br>
* </switch><br>
* @access public<br>
* @param string $attr 标签属性<br>
* @param string $content 标签内容<br>
* @return string<br>
*/<br>
public function _switch($attr,$content) {<br>
$tag = $this->parseXmlAttr($attr,'switch');<br>
$name = $tag['name'];<br>
$varArray = explode('|',$name);<br>
$name = array_shift($varArray);<br>
$name = $this->autoBuildVar($name);<br>
if(count($varArray)>0)<br>
$name = $this->tpl->parseVarFunction($name,$varArray);<br>
$parseStr = '<?php switch('.$name.'): ?>'.$content.'<?php endswitch;?>';<br>
return $parseStr;<br>
}<br>
<br>
/**<br>
* case标签解析 需要配合switch才有效<br>
* @access public<br>
* @param string $attr 标签属性<br>
* @param string $content 标签内容<br>
* @return string<br>
*/<br>
public function _case($attr,$content) {<br>
$tag = $this->parseXmlAttr($attr,'case');<br>
$value = $tag['value'];<br>
if('$' == substr($value,0,1)) {<br>
$varArray = explode('|',$value);<br>
$value = array_shift($varArray);<br>
$value = $this->autoBuildVar(substr($value,1));<br>
if(count($varArray)>0)<br>
$value = $this->tpl->parseVarFunction($value,$varArray);<br>
$value = 'case '.$value.': ';<br>
}elseif(strpos($value,'|')){<br>
$values = explode('|',$value);<br>
$value = '';<br>
foreach ($values as $val){<br>
$value .= 'case "'.addslashes($val).'": ';<br>
}<br>
}else{<br>
$value = 'case "'.$value.'": ';<br>
}<br>
$parseStr = '<?php '.$value.' ?>'.$content;<br>
$isBreak = isset($tag['break']) ? $tag['break'] : '';<br>
if('' ==$isBreak || $isBreak) {<br>
$parseStr .= '<?php break;?>';<br>
}<br>
return $parseStr;<br>
}<br>
<br>
/**<br>
* default标签解析 需要配合switch才有效<br>
* 使用: <default></default>ddfdf<br>
* @access public<br>
* @param string $attr 标签属性<br>
* @param string $content 标签内容<br>
* @return string<br>
*/<br>
public function _default($attr) {<br>
$parseStr = '<?php default: ?>';<br>
return $parseStr;<br>
}<br>
<br>
/**<br>
* compare标签解析<br>
* 用于值的比较 支持 eq neq gt lt egt elt heq nheq 默认是eq<br>
* 格式: <compare>content</compare><br>
* @access public<br>
* @param string $attr 标签属性<br>
* @param string $content 标签内容<br>
* @return string<br>
*/<br>
public function _compare($attr,$content,$type='eq') {<br>
$tag = $this->parseXmlAttr($attr,'compare');<br>
$name = $tag['name'];<br>
$value = $tag['value'];<br>
$type = isset($tag['type'])?$tag['type']:$type;<br>
$type = $this->parseCondition(' '.$type.' ');<br>
$varArray = explode('|',$name);<br>
$name = array_shift($varArray);<br>
$name = $this->autoBuildVar($name);<br>
if(count($varArray)>0)<br>
$name = $this->tpl->parseVarFunction($name,$varArray);<br>
if('$' == substr($value,0,1)) {<br>
$value = $this->autoBuildVar(substr($value,1));<br>
}else {<br>
$value = '"'.$value.'"';<br>
}<br>
$parseStr = '<?php if(('.$name.') '.$type.' '.$value.'): ?>'.$content.'<?php endif; ?>';<br>
return $parseStr;<br>
}<br>
<br>
public function _eq($attr,$content) {<br>
return $this->_compare($attr,$content,'eq');<br>
}<br>
<br>
public function _equal($attr,$content) {<br>
return $this->_compare($attr,$content,'eq');<br>
}<br>
<br>
public function _neq($attr,$content) {<br>
return $this->_compare($attr,$content,'neq');<br>
}<br>
<br>
public function _notequal($attr,$content) {<br>
return $this->_compare($attr,$content,'neq');<br>
}<br>
<br>
public function _gt($attr,$content) {<br>
return $this->_compare($attr,$content,'gt');<br>
}<br>
<br>
public function _lt($attr,$content) {<br>
return $this->_compare($attr,$content,'lt');<br>
}<br>
<br>
public function _egt($attr,$content) {<br>
return $this->_compare($attr,$content,'egt');<br>
}<br>
<br>
public function _elt($attr,$content) {<br>
return $this->_compare($attr,$content,'elt');<br>
}<br>
<br>
public function _heq($attr,$content) {<br>
return $this->_compare($attr,$content,'heq');<br>
}<br>
<br>
public function _nheq($attr,$content) {<br>
return $this->_compare($attr,$content,'nheq');<br>
}<br>
<br>
/**<br>
* range标签解析<br>
* 如果某个变量存在于某个范围 则输出内容 type= in 表示在范围内 否则表示在范围外<br>
* 格式: <range>content</range><br>
* example: <range>content</range><br>
* @access public<br>
* @param string $attr 标签属性<br>
* @param string $content 标签内容<br>
* @param string $type 比较类型<br>
* @return string<br>
*/<br>
public function _range($attr,$content,$type='in') {<br>
$tag = $this->parseXmlAttr($attr,'range');<br>
$name = $tag['name'];<br>
$value = $tag['value'];<br>
$varArray = explode('|',$name);<br>
$name = array_shift($varArray);<br>
$name = $this->autoBuildVar($name);<br>
if(count($varArray)>0)<br>
$name = $this->tpl->parseVarFunction($name,$varArray);<br>
<br>
$type = isset($tag['type'])?$tag['type']:$type;<br>
<br>
if('$' == substr($value,0,1)) {<br>
$value = $this->autoBuildVar(substr($value,1));<br>
$str = 'is_array('.$value.')?'.$value.':explode(\',\','.$value.')';<br>
}else{<br>
$value = '"'.$value.'"';<br>
$str = 'explode(\',\','.$value.')';<br>
}<br>
if($type=='between') {<br>
$parseStr = '<?php $_RANGE_VAR_='.$str.';if('.$name.'>= $_RANGE_VAR_[0] && '.$name.''.$content.'<?php endif; ?>';<br>
}elseif($type=='notbetween'){<br>
$parseStr = '<?php $_RANGE_VAR_='.$str.';if('.$name.'<$_RANGE_VAR_[0] || '.$name.'>$_RANGE_VAR_[1]):?>'.$content.'<?php endif; ?>';<br>
}else{<br>
$fun = ($type == 'in')? 'in_array' : '!in_array';<br>
$parseStr = '<?php if('.$fun.'(('.$name.'), '.$str.')): ?>'.$content.'<?php endif; ?>';<br>
}<br>
return $parseStr;<br>
}<br>
<br>
// range标签的别名 用于in判断<br>
public function _in($attr,$content) {<br>
return $this->_range($attr,$content,'in');<br>
}<br>
<br>
// range标签的别名 用于notin判断<br>
public function _notin($attr,$content) {<br>
return $this->_range($attr,$content,'notin');<br>
}<br>
<br>
public function _between($attr,$content){<br>
return $this->_range($attr,$content,'between');<br>
}<br>
<br>
public function _notbetween($attr,$content){<br>
return $this->_range($attr,$content,'notbetween');<br>
}<br>
<br>
/**<br>
* present标签解析<br>
* 如果某个变量已经设置 则输出内容<br>
* 格式: <present>content</present><br>
* @access public<br>
* @param string $attr 标签属性<br>
* @param string $content 标签内容<br>
* @return string<br>
*/<br>
public function _present($attr,$content) {<br>
$tag = $this->parseXmlAttr($attr,'present');<br>
$name = $tag['name'];<br>
$name = $this->autoBuildVar($name);<br>
$parseStr = '<?php if(isset('.$name.')): ?>'.$content.'<?php endif; ?>';<br>
return $parseStr;<br>
}<br>
<br>
/**<br>
* notpresent标签解析<br>
* 如果某个变量没有设置,则输出内容<br>
* 格式: <notpresent>content</notpresent><br>
* @access public<br>
* @param string $attr 标签属性<br>
* @param string $content 标签内容<br>
* @return string<br>
*/<br>
public function _notpresent($attr,$content) {<br>
$tag = $this->parseXmlAttr($attr,'notpresent');<br>
$name = $tag['name'];<br>
$name = $this->autoBuildVar($name);<br>
$parseStr = '<?php if(!isset('.$name.')): ?>'.$content.'<?php endif; ?>';<br>
return $parseStr;<br>
}<br>
<br>
/**<br>
* empty标签解析<br>
* 如果某个变量为empty 则输出内容<br>
* 格式: <empty>content</empty><br>
* @access public<br>
* @param string $attr 标签属性<br>
* @param string $content 标签内容<br>
* @return string<br>
*/<br>
public function _empty($attr,$content) {<br>
$tag = $this->parseXmlAttr($attr,'empty');<br>
$name = $tag['name'];<br>
$name = $this->autoBuildVar($name);<br>
$parseStr = '<?php if(empty('.$name.')): ?>'.$content.'<?php endif; ?>';<br>
return $parseStr;<br>
}<br>
<br>
public function _notempty($attr,$content) {<br>
$tag = $this->parseXmlAttr($attr,'notempty');<br>
$name = $tag['name'];<br>
$name = $this->autoBuildVar($name);<br>
$parseStr = '<?php if(!empty('.$name.')): ?>'.$content.'<?php endif; ?>';<br>
return $parseStr;<br>
}<br>
<br>
/**<br>
* 判断是否已经定义了该常量<br>
* <defined>已定义</defined><br>
* @param <type> $attr<br>
* @param <type> $content<br>
* @return string<br>
*/<br>
public function _defined($attr,$content) {<br>
$tag = $this->parseXmlAttr($attr,'defined');<br>
$name = $tag['name'];<br>
$parseStr = '<?php if(defined("'.$name.'")): ?>'.$content.'<?php endif; ?>';<br>
return $parseStr;<br>
}<br>
<br>
public function _notdefined($attr,$content) {<br>
$tag = $this->parseXmlAttr($attr,'_notdefined');<br>
$name = $tag['name'];<br>
$parseStr = '<?php if(!defined("'.$name.'")): ?>'.$content.'<?php endif; ?>';<br>
return $parseStr;<br>
}<br>
<br>
/**<br>
* import 标签解析 <import></import> <br>
* <import></import><br>
* @access public<br>
* @param string $attr 标签属性<br>
* @param string $content 标签内容<br>
* @param boolean $isFile 是否文件方式<br>
* @param string $type 类型<br>
* @return string<br>
*/<br>
public function _import($attr,$content,$isFile=false,$type='') {<br>
$tag = $this->parseXmlAttr($attr,'import');<br>
$file = isset($tag['file'])?$tag['file']:$tag['href'];<br>
$parseStr = '';<br>
$endStr = '';<br>
// 判断是否存在加载条件 允许使用函数判断(默认为isset)<br>
if (isset($tag['value'])) {<br>
$varArray = explode('|',$tag['value']);<br>
$name = array_shift($varArray);<br>
$name = $this->autoBuildVar($name);<br>
if (!empty($varArray))<br>
$name = $this->tpl->parseVarFunction($name,$varArray);<br>
else<br>
$name = 'isset('.$name.')';<br>
$parseStr .= '<?php if('.$name.'): ?>';<br>
$endStr = '<?php endif; ?>';<br>
}<br>
if($isFile) {<br>
// 根据文件名后缀自动识别<br>
$type = $type?$type:(!empty($tag['type'])?strtolower($tag['type']):null);<br>
// 文件方式导入<br>
$array = explode(',',$file);<br>
foreach ($array as $val){<br>
if (!$type || isset($reset)) {<br>
$type = $reset = strtolower(substr(strrchr($val, '.'),1));<br>
}<br>
switch($type) {<br>
case 'js':<br>
$parseStr .= '<script></script>';<br>
break;<br>
case 'css':<br>
$parseStr .= '<link>';<br>
break;<br>
case 'php':<br>
$parseStr .= '<?php require_cache("'.$val.'"); ?>';<br>
break;<br>
}<br>
}<br>
}else{<br>
// 命名空间导入模式 默认是js<br>
$type = $type?$type:(!empty($tag['type'])?strtolower($tag['type']):'js');<br>
$basepath = !empty($tag['basepath'])?$tag['basepath']:__ROOT__.'/Public';<br>
// 命名空间方式导入外部文件<br>
$array = explode(',',$file);<br>
foreach ($array as $val){<br>
list($val,$version) = explode('?',$val);<br>
switch($type) {<br>
case 'js':<br>
$parseStr .= '<script></script>';<br>
break;<br>
case 'css':<br>
$parseStr .= '<link>';<br>
break;<br>
case 'php':<br>
$parseStr .= '<?php import("'.$val.'"); ?>';<br>
break;<br>
}<br>
}<br>
}<br>
return $parseStr.$endStr;<br>
}<br>
<br>
// import别名 采用文件方式加载(要使用命名空间必须用import) 例如 <load></load><br>
public function _load($attr,$content) {<br>
return $this->_import($attr,$content,true);<br>
}<br>
<br>
// import别名使用 导入css文件 <css></css><br>
public function _css($attr,$content) {<br>
return $this->_import($attr,$content,true,'css');<br>
}<br>
<br>
// import别名使用 导入js文件 <js></js><br>
public function _js($attr,$content) {<br>
return $this->_import($attr,$content,true,'js');<br>
}<br>
<br>
/**<br>
* assign标签解析<br>
* 在模板中给某个变量赋值 支持变量赋值<br>
* 格式: <assign></assign><br>
* @access public<br>
* @param string $attr 标签属性<br>
* @param string $content 标签内容<br>
* @return string<br>
*/<br>
public function _assign($attr,$content) {<br>
$tag = $this->parseXmlAttr($attr,'assign');<br>
$name = $this->autoBuildVar($tag['name']);<br>
if('$'==substr($tag['value'],0,1)) {<br>
$value = $this->autoBuildVar(substr($tag['value'],1));<br>
}else{<br>
$value = '\''.$tag['value']. '\'';<br>
}<br>
$parseStr = '<?php '.$name.' = '.$value.'; ?>';<br>
return $parseStr;<br>
}<br>
<br>
/**<br>
* define标签解析<br>
* 在模板中定义常量 支持变量赋值<br>
* 格式: <define></define><br>
* @access public<br>
* @param string $attr 标签属性<br>
* @param string $content 标签内容<br>
* @return string<br>
*/<br>
public function _define($attr,$content) {<br>
$tag = $this->parseXmlAttr($attr,'define');<br>
$name = '\''.$tag['name']. '\'';<br>
if('$'==substr($tag['value'],0,1)) {<br>
$value = $this->autoBuildVar(substr($tag['value'],1));<br>
}else{<br>
$value = '\''.$tag['value']. '\'';<br>
}<br>
$parseStr = '<?php define('.$name.', '.$value.'); ?>';<br>
return $parseStr;<br>
}<br>
<br>
/**<br>
* for标签解析<br>
* 格式: <for></for><br>
* @access public<br>
* @param string $attr 标签属性<br>
* @param string $content 标签内容<br>
* @return string<br>
*/<br>
public function _for($attr, $content){<br>
//设置默认值<br>
$start = 0;<br>
$end = 0;<br>
$step = 1;<br>
$comparison = 'lt';<br>
$name = 'i';<br>
$rand = rand(); //添加随机数,防止嵌套变量冲突<br>
//获取属性<br>
foreach ($this->parseXmlAttr($attr, 'for') as $key => $value){<br>
$value = trim($value);<br>
if(':'==substr($value,0,1))<br>
$value = substr($value,1);<br>
elseif('$'==substr($value,0,1))<br>
$value = $this->autoBuildVar(substr($value,1));<br>
switch ($key){<br>
case 'start': <br>
$start = $value; break;<br>
case 'end' : <br>
$end = $value; break;<br>
case 'step': <br>
$step = $value; break;<br>
case 'comparison':<br>
$comparison = $value; break;<br>
case 'name':<br>
$name = $value; break;<br>
}<br>
}<br>
<br>
$parseStr = '<?php $__FOR_START_'.$rand.'__='.$start.';$__FOR_END_'.$rand.'__='.$end.';';<br />
$parseStr .= 'for($'.$name.'=$__FOR_START_'.$rand.'__;'.$this->parseCondition('$'.$name.' '.$comparison.' $__FOR_END_'.$rand.'__').';$'.$name.'+='.$step.'){ ?>';<br>
$parseStr .= $content;<br>
$parseStr .= '<?php } ?>';<br>
return $parseStr;<br>
}<br>
<br>
}</type></type></liu21st></liu21st>
AD:真正免费,域名+虚机+企业邮箱=0元