Items[$str])) { return $this->Items[$str]; } else { return ""; } } //同上 function GetAttribute($str) { return $this->GetAtt($str); } /** * 判断属性是否存在 * * @access public * @param string $str 属性名称 * @return string */ function IsAttribute($str) { return isset($this->Items[$str]) ? TRUE : FALSE; } /** * 获得标记名称 * * @access public * @return string */ function GetTagName() { return $this->GetAtt("tagname"); } /** * 获得属性个数 * * @access public * @return int */ function GetCount() { return $this->Count + 1; } } //End DedeAtt /** * 属性解析器 * function c____DedeAttParse(); * * @package DedeAtt * @subpackage DedeBIZ.Libraries * @link https://www.dedebiz.com */ class DedeAttParse { var $SourceString = ""; var $SourceMaxSize = 1024; var $CAtt; //属性的数据描述类 var $CharToLow = TRUE; /** * 设置属性解析器源字符串 * * @access public * @param string $str 需要解析的字符串 * @return string */ 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调用) * * @access private * @return void */ 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++; $this->CAtt->Items["tagname"] = ($this->CharToLow ? strtolower(trim($tmpvalue)) : 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 }//End DedeAttParse