> 백엔드 개발 > PHP 튜토리얼 > 필터링을 설정하고 속성을 유지하기 위해 PHP로 작성된 클래스

필터링을 설정하고 속성을 유지하기 위해 PHP로 작성된 클래스

WBOY
풀어 주다: 2016-07-25 09:04:19
원래의
1037명이 탐색했습니다.
  1. /**
  2. @ 속성 설정 및 유지를 위한 클래스
  3. @ class cleanHtml
  4. @ 링크: bbs.it-home.org
  5. @ 날짜: 2013/2/28
  6. */
  7. function reg_escape( $str )
  8. {
  9. $conversions = 배열 ( "^" => "^", "[" => "[", "." => ".", "$" => "$", "{" => "{" , "*" => "*", "(" => "(", "\" => "\\", "/" => "/", " " => " ", ")" => ")", "|" => "?", "> >" );
  10. return strtr( $str, $conversions );
  11. }
  12. /**
  13. * 스트립 속성 클래스
  14. * XML 요소에서 속성 제거
  15. * @author David (semlabs.co.uk)
  16. * @version 0.2.1
  17. */
  18. class cleanHtml{
  19. public $str = '';
  20. 공개 $allow = 배열();
  21. 공개 $예외 = 배열();
  22. 공개 $ignore = array();
  23. 공용 함수 스트립( $str )
  24. {
  25. $this->str = $str;
  26. if( is_string( $str ) && strlen( $str ) > 0 )
  27. {
  28. $res = $this->findElements();
  29. if( is_string( $res ) )
  30. return $res;
  31. $nodes = $this->findAttributes( $res );
  32. $this->removeAttributes( $nodes );
  33. }
  34. return $this->str;
  35. }
  36. private function findElements()
  37. {
  38. # 속성이 있는 요소 배열 생성
  39. $nodes = array();
  40. preg_match_all( "/<([^ !/>n] )([^>]*)>/i", $this->str, $elements );
  41. foreach( $elements[1] as $el_key => $element )
  42. {
  43. if( $elements[2][$el_key] )
  44. {
  45. $literal = $elements [0][$el_key];
  46. $element_name = $elements[1][$el_key];
  47. $속성 = $elements[2][$el_key];
  48. if( is_array( $this->ignore ) && !in_array( $element_name, $this->ignore ) )
  49. $nodes[] = array( 'literal' => $literal, 'name ' => $요소_이름, '속성' =>
  50. }
  51. }
  52. # 제거할 속성이 없으면 XML을 반환합니다.
  53. if( !$nodes[0] )
  54. return $this->str;
  55. else
  56. $nodes를 반환합니다.
  57. }
  58. private function findAttributes( $nodes )
  59. {
  60. # 속성 추출
  61. foreach( $nodes as &$node )
  62. {
  63. preg_match_all ( "/([^ =] )s*=s*["|']{0,1}([^"']*)["|']{0,1}/i", $node[' 속성'], $attributes );
  64. if( $attributes[1] )
  65. {
  66. foreach( $attributes[1] as $att_key => $att )
  67. {
  68. $ 리터럴 = $attributes[0][$att_key];
  69. $attribute_name = $attributes[1][$att_key]
  70. $value = $attributes[2][$att_key]; ] = array( '리터럴' => $literal, 'name' => $attribute_name, 'value' => $value )
  71. }
  72. }
  73. else
  74. $node[ '속성'] = null;
  75. $node['속성'] = $atts;
  76. 설정 해제( $atts );
  77. }
  78. $nodes를 반환합니다.
  79. }
  80. 비공개 함수 RemoveAttributes( $nodes )
  81. {
  82. # 원치 않는 속성 제거
  83. foreach( $nodes as $node )
  84. {
  85. # 확인 노드에 유지할 속성이 있는 경우
  86. $node_name = $node['name'];
  87. $new_attributes = '';
  88. if( is_array( $node['attributes'] ) )
  89. {
  90. foreach( $node['attributes'] as $attribute )
  91. {
  92. if( ( is_array( $this ->allow ) && in_array( $attribute['name'], $this->allow ) ) || $this->isException( $node_name, $attribute['name'], $this->예외 ) )
  93. $new_attributes = $this->createAttributes( $new_attributes, $attribute['name'], $attribute['value'] );
  94. }
  95. }
  96. $replacement = ( $new_attributes ) ? "<$node_name $new_attributes>" : "<$node_name>";
  97. $this->str = preg_replace( '/'.reg_escape( $node['literal'] ) .'/', $replacement, $this->str );
  98. }
  99. }
  100. 비공개 함수 isException( $element_name, $attribute_name, $Exceptions )
  101. {
  102. if( array_key_exists($element_name, $this->Exceptions) )
  103. {
  104. if( in_array( $attribute_name, $this->Exceptions[$element_name] ) )
  105. return true;
  106. }
  107. false를 반환합니다.
  108. }
  109. 비공개 함수 createAttributes( $new_attributes, $name, $value )
  110. {
  111. if( $new_attributes )
  112. $new_attributes .= " ";
  113. $new_attributes .= "$name="$value"";
  114. $new_attributes를 반환합니다.
  115. }
  116. }
  117. ?>
复代码

调用实例:

  1. $str = '다음은 <글꼴 색상="빨간색"> 고장나다 ';
  2. $sa = 새로운 cleanHtml;
  3. $sa->allow = array( 'id' );
  4. $sa->예외 = 배열(
  5. 'img' => 배열( 'src', 'alt' ),
  6. 'a' => 배열( 'href', '제목' ),
  7. 'iframe'=>array('src','frameborder'),
  8. );
  9. echo $str = $sa->strip( $str );
  10. ?>
复代码


원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿