📄 pub_dedehtml.php
字号:
//
function ParRefresh($att)
{
return $this->ParCharSet($att);
}
//
//补全相对网址
//
function FillUrl($surl)
{
$i = 0;
$dstr = "";
$pstr = "";
$okurl = "";
$pathStep = 0;
$surl = trim($surl);
if($surl=="") return "";
$pos = strpos($surl,"#");
if($pos>0) $surl = substr($surl,0,$pos);
if($surl[0]=="/"){
$okurl = "http://".$this->HomeUrl."/".$surl;
}
else if($surl[0]==".")
{
if(strlen($surl)<=2) return "";
else if($surl[0]=="/")
{
$okurl = "http://".$this->BaseUrlPath."/".substr($surl,2,strlen($surl)-2);
}
else{
$urls = explode("/",$surl);
foreach($urls as $u){
if($u=="..") $pathStep++;
else if($i<count($urls)-1) $dstr .= $urls[$i]."/";
else $dstr .= $urls[$i];
$i++;
}
$urls = explode("/",$this->BaseUrlPath);
if(count($urls) <= $pathStep)
return "";
else{
$pstr = "http://";
for($i=0;$i<count($urls)-$pathStep;$i++)
{ $pstr .= $urls[$i]."/"; }
$okurl = $pstr.$dstr;
}
}
}
else
{
if(strlen($surl)<7)
$okurl = "http://".$this->BaseUrlPath."/".$surl;
else if(strtolower(substr($surl,0,7))=="http://")
$okurl = $surl;
else
$okurl = "http://".$this->BaseUrlPath."/".$surl;
}
$okurl = eregi_replace("^(http://)","",$okurl);
$okurl = eregi_replace("/{1,}","/",$okurl);
return "http://".$okurl;
}
//
//获得和下一个标记之间的文本内容
//
function GetInnerText($pos)
{
$startPos=0;
$endPos=0;
$textLen=0;
$str="";
$startPos = strpos($this->SourceHtml,'>',$pos);
$endPos = strpos($this->SourceHtml,'<',$startPos);
if($endPos>$startPos)
{
$textLen = $endPos-$startPos;
$str = substr($this->SourceHtml,$startPos+1,$textLen-1);
}
return $str;
}
//
//把连续多个或单个特殊符号换为空格
//如果中英文混合的串也会被分开
//
function TrimSymbol($str)
{
if(strtolower($this->CharSet)=="utf-8"){
$str = utf82gb($str);
}
else if(strtolower($this->CharSet)=="big5"){
$str = big52gb($str);
}
else if(!eregi("^gb",$this->CharSet)){
$this->NotEncodeText .= $str;
return "";
}
$str = trim($str);
$slen = strlen($str);
if($slen==0) return "";
$okstr = "";
for($i=0;$i<$slen;$i++){
if(ord($str[$i]) < 0x81){
//当字符为英文中的特殊符号
if(ereg("[^0-9a-zA-Z@.%#:/\\&-]",$str[$i])){
if($okstr!=""){ if( $okstr[strlen($okstr)-1]!=" " ) $okstr .= " "; }
}
//如果字符为非特殊符号
else{
if(strlen($okstr)>1){
if(ord($okstr[strlen($okstr)-2])>0x80) $okstr .= " ".$str[$i];
else $okstr .= $str[$i];
}
else $okstr .= $str[$i];
}
}
else
{
//如果上一个字符为非中文和非空格,则加一个空格
if(strlen($okstr)>1){
if(ord($okstr[strlen($okstr)-2]) < 0x81 && $okstr[strlen($okstr)-1]!=" ")
{ $okstr .= " "; }
}
//如果中文字符
if( isset($str[$i+1]) ){
$c = $str[$i].$str[$i+1];
$n = hexdec(bin2hex($c));
if($n < 0xB0A1)
{
if($c=="《")
{ $okstr .= " 《"; }
else if($c=="》")
{ $okstr .= "》 "; }
else if($okstr[strlen($okstr)-1]!=" ")
{ $okstr .= " "; }
}
else{
//F7 - FE 是GB2312的终结编码
if($n < 0xF8FF) $okstr .= $c;
}
$i++;
}
else{
$okstr .= $str[$i];
}
}
}//结束循环
return $okstr;
}
//
//确认标记后面是否存在跟热点词的可能性
//
function IsHot($tag,$datt)
{
$hottag="b|strong|h1|h2|h3|h4|h5|h6";
if($tag=="font"||$tag=="p"||$tag=="div"||$tag=="span")
return $this->IsRed($datt);
else
return ereg($hottag,$tag);
}
//
//检查是否使用红色字
//
function IsRed($datt)
{
$color = strtolower($datt->GetAtt("color"));
if($color=="") return false;
else
{
if($color=="red"||$color=="#ff0000"||$color=="ff0000") return true;
else return false;
}
}
}//End class
/*******************************
//属性解析器
function c____DedeAttribute();
********************************/
class DedeAttribute
{
var $SourceString = "";
var $SourceMaxSize = 1024;
var $CharToLow = FALSE; //属性值是否不分大小写(属性名统一为小写)
var $IsTagName = TRUE; //是否解析标记名称
var $Count = -1;
var $Items = ""; //属性元素的集合
//设置属性解析器源字符串
function SetSource($str="")
{
$this->Count = -1;
$this->Items = "";
$strLen = 0;
$this->SourceString = trim(preg_replace("/[ \t\r\n]{1,}/"," ",$str));
$strLen = strlen($this->SourceString);
$this->SourceString .= " "; //增加一个空格结尾,以方便处理没有属性的标记
if($strLen>0&&$strLen<=$this->SourceMaxSize){
$this->PrivateAttParse();
}
}
//获得某个属性
function GetAtt($str){
if($str=="") return "";
$str = strtolower($str);
if(isset($this->Items[$str])) return $this->Items[$str];
else return "";
}
//判断属性是否存在
function IsAtt($str){
if($str=="") return false;
$str = strtolower($str);
if(isset($this->Items[$str])) return true;
else return false;
}
//获得标记名称
function GetTagName(){
return $this->GetAtt("tagname");
}
// 获得属性个数
function GetCount(){
return $this->Count+1;
}
//解析属性(仅给SetSource调用)
function PrivateAttParse()
{
$d = "";
$tmpatt="";
$tmpvalue="";
$startdd=-1;
$ddtag="";
$strLen = strlen($this->SourceString);
$j = 0;
//这里是获得标记的名称
if($this->IsTagName)
{
//如果属性是注解,不再解析里面的内容,直接返回
if(isset($this->SourceString[2]))
{
if($this->SourceString[0].$this->SourceString[1].$this->SourceString[2]=="!--")
{ $this->Items["tagname"] = "!--"; return ;}
}
//
for($i=0;$i<$strLen;$i++){
$d = $this->SourceString[$i];
$j++;
if(ereg("[ '\"\r\n\t]",$d)){
$this->Count++;
$this->Items["tagname"]=strtolower(trim($tmpvalue));
$tmpvalue = ""; break;
}
else
{ $tmpvalue .= $d;}
}
if($j>0) $j = $j-1;
}
//遍历源字符串,获得各属性
for($i=$j;$i<$strLen;$i++)
{
$d = $this->SourceString[$i];
//获得属性的键
if($startdd==-1){
if($d!="=") $tmpatt .= $d;
else{
$tmpatt = strtolower(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->Count++;
if($this->CharToLow) $this->Items[$tmpatt] = strtolower(trim($tmpvalue));
else $this->Items[$tmpatt] = trim($tmpvalue);
$tmpatt = "";
$tmpvalue = "";
$startdd=-1;
}
else
$tmpvalue.=$d;
}
}//End for
//处理没有值的属性(必须放在结尾才有效)如:"input type=radio name=t1 value=aaa checked"
if($tmpatt!="")
{ $this->Items[$tmpatt] = "";}
}//End Function PrivateAttParse
}//End Class DedeAttribute
?>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -