📄 pub_dedeattribute.php
字号:
<?php
//本文件是从pub_dedetag.php分离出来的属性解析器
/**********************************************
//class DedeAtt Dede模板标记属性集合
function c____DedeAtt();
**********************************************/
//属性的数据描述
class DedeAtt
{
var $Count = -1;
var $Items = ""; //属性元素的集合
//获得某个属性
function GetAtt($str){
if($str=="") return "";
if(isset($this->Items[$str])) return $this->Items[$str];
else return "";
}
//同上
function GetAttribute($str){
return $this->GetAtt($str);
}
//判断属性是否存在
function IsAttribute($str){
if(isset($this->Items[$str])) return true;
else return false;
}
//获得标记名称
function GetTagName(){
return $this->GetAtt("tagname");
}
// 获得属性个数
function GetCount(){
return $this->Count+1;
}
}
/*******************************
//属性解析器
function c____DedeAttParse();
********************************/
class DedeAttParse
{
var $SourceString = "";
var $SourceMaxSize = 1024;
var $CAtt = ""; //属性的数据描述类
var $CharToLow = TRUE;
//////设置属性解析器源字符串////////////////////////
function SetSource($str="")
{
$this->CAtt = new DedeAtt();
//////////////////////
$strLen = 0;
$this->SourceString = trim(preg_replace("/[ \t\r\n]{1,}/"," ",$str));
$strLen = strlen($this->SourceString);
if($strLen>0&&$strLen<=$this->SourceMaxSize){
$this->ParseAtt();
}
}
//////解析属性(私有成员,仅给SetSource调用)/////////////////
function ParseAtt()
{
$d = "";
$tmpatt="";
$tmpvalue="";
$startdd=-1;
$ddtag="";
$notAttribute=true;
$strLen = strlen($this->SourceString);
// 这里是获得Tag的名称,可视情况是否需要
// 如果不在这个里解析,则在解析整个Tag时解析
// 属性中不应该存在tagname这个名称
for($i=0;$i<$strLen;$i++)
{
$d = substr($this->SourceString,$i,1);
if($d==' '){
$this->CAtt->Count++;
if($this->CharToLow) $this->CAtt->Items["tagname"]=strtolower(trim($tmpvalue));
else $this->CAtt->Items["tagname"]=trim($tmpvalue);
$tmpvalue = "";
$notAttribute = false;
break;
}
else
$tmpvalue .= $d;
}
//不存在属性列表的情况
if($notAttribute)
{
$this->CAtt->Count++;
if($this->CharToLow) $this->CAtt->Items["tagname"]=strtolower(trim($tmpvalue));
else $this->CAtt->Items["tagname"]=trim($tmpvalue);
}
//如果字符串含有属性值,遍历源字符串,并获得各属性
if(!$notAttribute){
for($i;$i<$strLen;$i++)
{
$d = substr($this->SourceString,$i,1);
if($startdd==-1){
if($d!="=") $tmpatt .= $d;
else{
if($this->CharToLow) $tmpatt = strtolower(trim($tmpatt));
else $tmpatt = trim($tmpatt);
$startdd=0;
}
}
else if($startdd==0)
{
switch($d){
case ' ':
continue;
break;
case '\'':
$ddtag='\'';
$startdd=1;
break;
case '"':
$ddtag='"';
$startdd=1;
break;
default:
$tmpvalue.=$d;
$ddtag=' ';
$startdd=1;
break;
}
}
else if($startdd==1)
{
if($d==$ddtag){
$this->CAtt->Count++;
$this->CAtt->Items[$tmpatt] = trim($tmpvalue);//strtolower(trim($tmpvalue));
$tmpatt = "";
$tmpvalue = "";
$startdd=-1;
}
else
$tmpvalue.=$d;
}
}
if($tmpatt!=""){
$this->CAtt->Count++;
$this->CAtt->Items[$tmpatt]=trim($tmpvalue);//strtolower(trim($tmpvalue));
}
//完成属性解析
}//for
}//has Attribute
}
?>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -