mirror of
https://gitee.com/fastadminnet/framework.git
synced 2026-07-07 15:12:48 +08:00
新增视图变量输出默认过滤方法
This commit is contained in:
@@ -51,6 +51,7 @@ class Template
|
|||||||
'cache_id' => '', // 模板缓存ID
|
'cache_id' => '', // 模板缓存ID
|
||||||
'tpl_replace_string' => [],
|
'tpl_replace_string' => [],
|
||||||
'tpl_var_identify' => 'array', // .语法变量识别,array|object|'', 为空时自动识别
|
'tpl_var_identify' => 'array', // .语法变量识别,array|object|'', 为空时自动识别
|
||||||
|
'default_filter' => 'htmlentities', // 默认过滤方法 用于普通标签输出
|
||||||
];
|
];
|
||||||
|
|
||||||
private $literal = [];
|
private $literal = [];
|
||||||
@@ -732,7 +733,7 @@ class Template
|
|||||||
$array = preg_split('/([!=]={1,2}|(?<!-)[><]={0,1})/', substr($str, 0, $pos), 2, PREG_SPLIT_DELIM_CAPTURE);
|
$array = preg_split('/([!=]={1,2}|(?<!-)[><]={0,1})/', substr($str, 0, $pos), 2, PREG_SPLIT_DELIM_CAPTURE);
|
||||||
$name = $array[0];
|
$name = $array[0];
|
||||||
$this->parseVar($name);
|
$this->parseVar($name);
|
||||||
$this->parseVarFunction($name);
|
//$this->parseVarFunction($name);
|
||||||
|
|
||||||
$str = trim(substr($str, $pos + 1));
|
$str = trim(substr($str, $pos + 1));
|
||||||
$this->parseVar($str);
|
$this->parseVar($str);
|
||||||
@@ -745,6 +746,7 @@ class Template
|
|||||||
}
|
}
|
||||||
switch ($first) {
|
switch ($first) {
|
||||||
case '?':
|
case '?':
|
||||||
|
$this->parseVarFunction($name);
|
||||||
$str = '<?php echo (' . $name . ') ? ' . $name . ' : ' . substr($str, 1) . '; ?>';
|
$str = '<?php echo (' . $name . ') ? ' . $name . ' : ' . substr($str, 1) . '; ?>';
|
||||||
break;
|
break;
|
||||||
case '=':
|
case '=':
|
||||||
@@ -760,22 +762,39 @@ class Template
|
|||||||
} else {
|
} else {
|
||||||
$express = false;
|
$express = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (in_array($first, ['?', '=', ':'])) {
|
||||||
|
$str = trim(substr($str, 1));
|
||||||
|
if (strpos($str, '$') === 0) {
|
||||||
|
$str = $this->parseVarFunction($str);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// $name为数组
|
// $name为数组
|
||||||
switch ($first) {
|
switch ($first) {
|
||||||
case '?':
|
case '?':
|
||||||
// {$varname??'xxx'} $varname有定义则输出$varname,否则输出xxx
|
// {$varname??'xxx'} $varname有定义则输出$varname,否则输出xxx
|
||||||
$str = '<?php echo ' . ($express ?: 'isset(' . $name . ')') . '?' . $name . ':' . substr($str, 1) . '; ?>';
|
$str = '<?php echo ' . ($express ?: 'isset(' . $name . ')') . ' ? ' . $this->parseVarFunction($name) . ' : ' . $str . '; ?>';
|
||||||
break;
|
break;
|
||||||
case '=':
|
case '=':
|
||||||
// {$varname?='xxx'} $varname为真时才输出xxx
|
// {$varname?='xxx'} $varname为真时才输出xxx
|
||||||
$str = '<?php if(' . ($express ?: '!empty(' . $name . ')') . ') echo ' . substr($str, 1) . '; ?>';
|
$str = '<?php if(' . ($express ?: '!empty(' . $name . ')') . ') echo ' . $str . '; ?>';
|
||||||
break;
|
break;
|
||||||
case ':':
|
case ':':
|
||||||
// {$varname?:'xxx'} $varname为真时输出$varname,否则输出xxx
|
// {$varname?:'xxx'} $varname为真时输出$varname,否则输出xxx
|
||||||
$str = '<?php echo ' . ($express ?: '!empty(' . $name . ')') . '?' . $name . $str . '; ?>';
|
$str = '<?php echo ' . ($express ?: '!empty(' . $name . ')') . ' ? ' . $this->parseVarFunction($name) . ' : ' . $str . '; ?>';
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
$str = '<?php echo ' . ($express ?: '!empty(' . $name . ')') . '?' . $str . '; ?>';
|
if (strpos($str, ':')) {
|
||||||
|
// {$varname ? 'a' : 'b'} $varname为真时输出a,否则输出b
|
||||||
|
$array = explode(':', $str, 2);
|
||||||
|
|
||||||
|
$array[0] = strpos(trim($array[0]), '$') === 0 ? $this->parseVarFunction($array[0]) : $array[0];
|
||||||
|
$array[1] = strpos(trim($array[1]), '$') === 0 ? $this->parseVarFunction($array[1]) : $array[1];
|
||||||
|
|
||||||
|
$str = implode(' : ', $array);
|
||||||
|
}
|
||||||
|
$str = '<?php echo ' . ($express ?: '!empty(' . $name . ')') . ' ? ' . $str . '; ?>';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@@ -886,13 +905,20 @@ class Template
|
|||||||
* 格式 {$varname|function1|function2=arg1,arg2}
|
* 格式 {$varname|function1|function2=arg1,arg2}
|
||||||
* @access public
|
* @access public
|
||||||
* @param string $varStr 变量字符串
|
* @param string $varStr 变量字符串
|
||||||
|
* @param bool $autoescape 自动转义
|
||||||
* @return void
|
* @return void
|
||||||
*/
|
*/
|
||||||
public function parseVarFunction(&$varStr)
|
public function parseVarFunction(&$varStr, $autoescape = true)
|
||||||
{
|
{
|
||||||
if (false == strpos($varStr, '|')) {
|
if (!$autoescape && strpos($varStr, '|') === false) {
|
||||||
return;
|
return $varStr;
|
||||||
|
} elseif ($autoescape && !preg_match('/\|(\s)?raw(\||\s)?/i', $varStr) && $this->config['default_filter']) {
|
||||||
|
// 如果varStr中不存在默认过滤规则,则应用默认过滤
|
||||||
|
if (!preg_match('/\|(\s)?' . $this->config['default_filter'] . '(\||\s)?/i', $varStr)) {
|
||||||
|
$varStr .= '|' . $this->config['default_filter'];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static $_varFunctionList = [];
|
static $_varFunctionList = [];
|
||||||
$_key = md5($varStr);
|
$_key = md5($varStr);
|
||||||
//如果已经解析过该变量字串,则直接返回变量值
|
//如果已经解析过该变量字串,则直接返回变量值
|
||||||
@@ -901,7 +927,7 @@ class Template
|
|||||||
} else {
|
} else {
|
||||||
$varArray = explode('|', $varStr);
|
$varArray = explode('|', $varStr);
|
||||||
// 取得变量名称
|
// 取得变量名称
|
||||||
$name = array_shift($varArray);
|
$name = trim(array_shift($varArray));
|
||||||
// 对变量使用函数
|
// 对变量使用函数
|
||||||
$length = count($varArray);
|
$length = count($varArray);
|
||||||
// 取得模板禁止使用函数列表
|
// 取得模板禁止使用函数列表
|
||||||
@@ -911,6 +937,11 @@ class Template
|
|||||||
// 模板函数过滤
|
// 模板函数过滤
|
||||||
$fun = trim($args[0]);
|
$fun = trim($args[0]);
|
||||||
switch ($fun) {
|
switch ($fun) {
|
||||||
|
case 'raw':
|
||||||
|
break;
|
||||||
|
case 'htmlentities':
|
||||||
|
$name = 'htmlentities((string) ' . $name . ')';
|
||||||
|
break;
|
||||||
case 'default': // 特殊模板函数
|
case 'default': // 特殊模板函数
|
||||||
if (false === strpos($name, '(')) {
|
if (false === strpos($name, '(')) {
|
||||||
$name = '(isset(' . $name . ') && (' . $name . ' !== \'\')?' . $name . ':' . $args[1] . ')';
|
$name = '(isset(' . $name . ') && (' . $name . ' !== \'\')?' . $name . ':' . $args[1] . ')';
|
||||||
|
|||||||
@@ -317,7 +317,7 @@ class TagLib
|
|||||||
$name = '$' . $name;
|
$name = '$' . $name;
|
||||||
}
|
}
|
||||||
$this->tpl->parseVar($name);
|
$this->tpl->parseVar($name);
|
||||||
$this->tpl->parseVarFunction($name);
|
$this->tpl->parseVarFunction($name, false);
|
||||||
return $name;
|
return $name;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user