ECSHOP系统导出数据包里,假如IMG标签中有其它属性,淘宝会屏蔽掉,因此需要写此函数。
姑且所作,不免有思量不周之处,望伴侣们多做指正,则个!
<?php //取得标签中的一个属性的值 标签全代码 属性名 function getPropertyValue($str,$prty) { if (substr($str,-2)=="/>") $str=substr($str,1,strlen($str)-3); else $str=substr($str,1,strlen($str)-2); $tmp=explode(" ",$str); foreach($tmp as $p) { $ts=trim($p); if (!empty($ts)) { $ta=explode("=",$ts); if (strtoupper($ta[0])==strtoupper($prty)) { return str_replace('"',"",$ta[1]); } } } return ""; } //排除HTML标签中不需要的属性 //代码段str 处理惩罚的标签 str 要保存的属性str or arr function clearHtmlTagProperty($str,$findtag,$saveprty) { $l=0;$ol=0;$e=0; $nstr=""; if (!is_array($saveprty)) $saveprty=array($saveprty); $l=0; $ol=0; $l=strpos($str,"<",$l); $nstr.=substr($str,$e,$l-$e); while (! ($l===false)) { $ol=$e; //获得标签串 $e=strpos($str,">",$l)+1; $tmp=substr($str,$l,$e-$l); if (strtoupper(substr($tmp,1,strlen($findtag)))==strtoupper($findtag)) { //轮回处理惩罚要保存的属性记入新字符串 $nstr.='<'.$findtag; foreach($saveprty as $prty) { //插手保存属性 $nstr.=' '.$prty.'="'.getPropertyValue($tmp,$prty).'"'; } if (substr($tmp,-2)=="/>") $nstr.='/>'; else $nstr.=">"; } else $nstr.=substr($str,$ol,$e-$ol); $l=strpos($str,"<",$l+1); } if ($ol==0) $nstr=$str; else $nstr.=substr($str,$e); return $nstr; } /*利用要领一,标签参数为ARRAY $xxxx=htmlspecialchars(clearHtmlTagProperty('abcde<img src=http://enenba.com/123345 />xxxx<table></table>s',"img",array("src","border"))); 利用要领二,标签参数为STRING $xxxx=htmlspecialchars(clearHtmlTagProperty('abcde<img src=http://enenba.com/123345 />xxxx<table></table>s',"img",array("src","border"))); */ echo $xxxx; ?>
20090331
批改:属性值中有空格时会呈现问题
批改:属性值利用单引号包罗时呈现问题
替换函数:
//取得标签中的一个属性的值 标签全代码 属性名 function getPropertyValue($str,$prty) { if (substr($str,-2)=="/>") $str=substr($str,1,strlen($str)-3); else $str=substr($str,1,strlen($str)-2); $tmp=explode(" ",$str); //假如属性中有空格的,直接连上 $i=$j=0; $e=count($tmp); while ($j<$e) { $j++; if (strspn('=',$tmp[$i])>0 && strspn('=',$tmp[$j])==0 && (strspn('"',$tmp[$i])/2!=0 || strspn('"',$tmp[$i])==0)) { $tmp[$i].=" ".$tmp[$j]; $tmp[$j]=""; } else $i=$j; } foreach($tmp as $p) { $ts=trim($p); if (!empty($ts)) { $ta=explode("=",$ts); if (strtoupper($ta[0])==strtoupper($prty)) { return str_replace("'","",str_replace('"',"",$ta[1])); } } } return ""; }