-
- /**
- @ 속성 설정 및 유지를 위한 클래스
- @ class cleanHtml
- @ 링크: bbs.it-home.org
- @ 날짜: 2013/2/28
- */
- function reg_escape( $str )
- {
- $conversions = 배열 ( "^" => "^", "[" => "[", "." => ".", "$" => "$", "{" => "{" , "*" => "*", "(" => "(", "\" => "\\", "/" => "/", " " => " ", ")" => ")", "|" => "?", "> >" );
- return strtr( $str, $conversions );
- }
-
- /**
- * 스트립 속성 클래스
- * XML 요소에서 속성 제거
- * @author David (semlabs.co.uk)
- * @version 0.2.1
- */
-
- class cleanHtml{
- public $str = '';
- 공개 $allow = 배열();
- 공개 $예외 = 배열();
- 공개 $ignore = array();
-
- 공용 함수 스트립( $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;
- }
-
- private function findElements()
- {
-
- # 속성이 있는 요소 배열 생성
- $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];
- $속성 = $elements[2][$el_key];
- if( is_array( $this->ignore ) && !in_array( $element_name, $this->ignore ) )
- $nodes[] = array( 'literal' => $literal, 'name ' => $요소_이름, '속성' =>
- }
- }
-
- # 제거할 속성이 없으면 XML을 반환합니다.
- if( !$nodes[0] )
- return $this->str;
- else
- $nodes를 반환합니다.
- }
-
- private function findAttributes( $nodes )
- {
-
- # 속성 추출
- foreach( $nodes as &$node )
- {
- preg_match_all ( "/([^ =] )s*=s*["|']{0,1}([^"']*)["|']{0,1}/i", $node[' 속성'], $attributes );
- if( $attributes[1] )
- {
- foreach( $attributes[1] as $att_key => $att )
- {
- $ 리터럴 = $attributes[0][$att_key];
- $attribute_name = $attributes[1][$att_key]
- $value = $attributes[2][$att_key]; ] = array( '리터럴' => $literal, 'name' => $attribute_name, 'value' => $value )
- }
- }
- else
- $node[ '속성'] = null;
-
- $node['속성'] = $atts;
- 설정 해제( $atts );
- }
-
- $nodes를 반환합니다.
- }
-
- 비공개 함수 RemoveAttributes( $nodes )
- {
-
- # 원치 않는 속성 제거
- foreach( $nodes as $node )
- {
-
- # 확인 노드에 유지할 속성이 있는 경우
- $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->예외 ) )
- $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 );
- }
- }
-
- 비공개 함수 isException( $element_name, $attribute_name, $Exceptions )
- {
- if( array_key_exists($element_name, $this->Exceptions) )
- {
- if( in_array( $attribute_name, $this->Exceptions[$element_name] ) )
- return true;
- }
-
- false를 반환합니다.
- }
-
- 비공개 함수 createAttributes( $new_attributes, $name, $value )
- {
- if( $new_attributes )
- $new_attributes .= " ";
- $new_attributes .= "$name="$value"";
-
- $new_attributes를 반환합니다.
- }
- }
- ?>
复代码
调用实例:
-
- $str = '다음은 <글꼴 색상="빨간색"> 고장나다 스팬> ';
-
- $sa = 새로운 cleanHtml;
- $sa->allow = array( 'id' );
-
- $sa->예외 = 배열(
- 'img' => 배열( 'src', 'alt' ),
- 'a' => 배열( 'href', '제목' ),
- 'iframe'=>array('src','frameborder'),
- );
-
- echo $str = $sa->strip( $str );
- ?>
复代码
|