美文网首页
php clean html 可以设置过滤及保留属性

php clean html 可以设置过滤及保留属性

作者: 四季变幻 | 来源:发表于2016-03-26 20:54 被阅读131次

类:

Php代码

functionreg_escape($str)

{

$conversions=array("^"=>"\^","["=>"\[","."=>"\.","$"=>"\$","{"=>"\{","*"=>"\*","("=>"\(","\\" => "\\\\", "/" => "\/", "+" => "\+", ")" => "\)", "|" => "\|", "?" => "\?", "<" => "\<", ">" => "\>" );

returnstrtr($str,$conversions);

}

/**

* Strip attribute Class

* Remove attributes from XML elements

* @author David (semlabs.co.uk)

* @version 0.2.1

*/

classcleanHtml{

public$str='';

public$allow=array();

public$exceptions=array();

public$ignore=array();

publicfunctionstrip($str)

{

$this->str =$str;

if(is_string($str) &&strlen($str) > 0 )

{

$res=$this->findElements();

if(is_string($res) )

return$res;

$nodes=$this->findAttributes($res);

$this->removeAttributes($nodes);

}

return$this->str;

}

privatefunctionfindElements()

{

# Create anarrayof elements with attributes

$nodes=array();

preg_match_all("/<([^ !\/\>\n]+)([^>]*)>/i",$this->str,$elements);

foreach($elements[1]as$el_key=>$element)

{

if($elements[2][$el_key] )

{

$literal=$elements[0][$el_key];

$element_name=$elements[1][$el_key];

$attributes=$elements[2][$el_key];

if(is_array($this->ignore ) && !in_array($element_name,$this->ignore ) )

$nodes[] =array('literal'=>$literal,'name'=>$element_name,'attributes'=>$attributes);

}

}

# Return the XMLifthere were no attributes to remove

if( !$nodes[0] )

return$this->str;

else

return$nodes;

}

privatefunctionfindAttributes($nodes)

{

# Extract attributes

foreach($nodesas&$node)

{

preg_match_all("/([^ =]+)\s*=\s*[\"|']{0,1}([^\"']*)[\"|']{0,1}/i",$node['attributes'],$attributes);

if($attributes[1] )

{

foreach($attributes[1]as$att_key=>$att)

{

$literal=$attributes[0][$att_key];

$attribute_name=$attributes[1][$att_key];

$value=$attributes[2][$att_key];

$atts[] =array('literal'=>$literal,'name'=>$attribute_name,'value'=>$value);

}

}

else

$node['attributes'] = null;

$node['attributes'] =$atts;

unset($atts);

}

return$nodes;

}

privatefunctionremoveAttributes($nodes)

{

# Remove unwanted attributes

foreach($nodesas$node)

{

# Checkifnode has any attributes to be kept

$node_name=$node['name'];

$new_attributes='';

if(is_array($node['attributes'] ) )

{

foreach($node['attributes']as$attribute)

{

if( (is_array($this->allow ) && in_array($attribute['name'],$this->allow ) ) ||$this->isException($node_name,$attribute['name'],$this->exceptions ) )

$new_attributes=$this->createAttributes($new_attributes,$attribute['name'],$attribute['value'] );

}

}

$replacement= ($new_attributes) ?"<$node_name $new_attributes>":"<$node_name>";

$this->str = preg_replace('/'. reg_escape($node['literal'] ) .'/',$replacement,$this->str );

}

}

privatefunctionisException($element_name,$attribute_name,$exceptions)

{

if(array_key_exists($element_name,$this->exceptions) )

{

if( in_array($attribute_name,$this->exceptions[$element_name] ) )

returntrue;

}

returnfalse;

}

privatefunctioncreateAttributes($new_attributes,$name,$value)

{

if($new_attributes)

$new_attributes.=" ";

$new_attributes.="$name=\"$value\"";

return$new_attributes;

}

}

实例:

C代码

$str ='Here is some sample html that is   getting broken    ';

$sa =newcleanHtml;

$sa->allow = array('id');

$sa->exceptions = array(

'img'=> array('src','alt'),

'a'=> array('href','title'),

'iframe'=>array('src','frameborder'),

);

echo $str = $sa->strip( $str );

来源:semlabs.co.uk

原文:http://justcoding.iteye.com/blog/1473623


其他:http://blog.csdn.net/china_skag/article/details/7551072

相关文章

  • php clean html 可以设置过滤及保留属性

    类: Php代码 functionreg_escape($str) { $conversions=array("^...

  • HTML:基础(3)属性

    HTML 属性 属性是 HTML 元素提供的附加信息。 HTML 属性 HTML 元素可以设置属性 属性可以在元素...

  • HTML 属性

    属性是 HTML 元素提供的附加信息。 HTML 属性 HTML 元素可以设置属性 属性可以在元素中添加附加信息 ...

  • HTML 属性

    属性是 HTML 元素提供的附加信息。 HTML 属性 HTML 元素可以设置属性 属性可以在元素中添加附加信息 ...

  • JQuery

    设置样式 获取属性 改变html 操作css 各种尺寸 获取节点 获取兄弟节点 过滤 JQuery和AJAX

  • CSS background背景

    CSS背景属性 CSS背景属性用于设置HTML元素的背景(填充),复合属性 background 可以用来设置背景...

  • Paint的详解

    在Paint中有很多的属性可以设置,比如可以设置阴影,颜色过滤等等,这些会产生不同的奇妙效果,今天就对各种属性探索...

  • Twig之过滤页面的html元素

    一、去除字符串中的 HTML/PHP 标记 1、带HTML元素的效果图 2、过滤字符串中的 HTML/PHP 标记...

  • jQuery粗略源码解析5 属性操作

    1 HTML属性操作 .attr() 获取设置HTML属性值 .removeAttr() 移除html属性 2 D...

  • 组件化

    v-bind(:) 用于设置HTML属性v-on(@)用于绑定HTML事件 1.使用:设置HTML属性(1)组件 ...

网友评论

      本文标题:php clean html 可以设置过滤及保留属性

      本文链接:https://www.haomeiwen.com/subject/hbidlttx.html