> 백엔드 개발 > PHP 튜토리얼 > HTML 미리보기 정기 교체

HTML 미리보기 정기 교체

WBOY
풀어 주다: 2016-07-25 09:09:25
원래의
1032명이 탐색했습니다.
HTML 미리보기 정기 교체
  1. /**
  2. * HTML 교체 처리 클래스, 다음 교체 고려
  3. * 1. img src: '/] ? )/i'
  4. * 2. a href : '/] ?)/i'
  5. * 3 . ifram.src : '/] ?)/i'
  6. * 4. 프레임 src : '/< ; 프레임(. ?)src=(['" ])?(. ?)([ >] ?)/i'
  7. * 5. js : '/window.open([( ] ?)([ ' " ] ?)(. ?)([ ) ?])/i'
  8. * 6. css : '/Background(. ?)url([( ])(['" ] ?)(. ?) ( [ ) ?])/i'
  9. */
  10. class Myreplace {
  11. private $moudle_array = array('udata','tdata','tresult','dresult');
  12. private $content;
  13. private $relative_dirname;
  14. private $projectid ;
  15. 비공개 $moudle;
  16. 함수 __construct() {
  17. $this->CI = &get_instance ();
  18. }
  19. /**
  20. * 바꾸기
  21. * @param string $content HTML 콘텐츠
  22. * @param string $relative 상대 경로
  23. * @param int $projectid 프로젝트 ID
  24. * @moudle string $moudle 템플릿 식별: udata,tdata,tresult,dresult
  25. */
  26. 공개 함수 my_replace($content,$relative,$projectid,$moudle) {
  27. $this->content = $content;
  28. $this->relative_dirname = $relative;
  29. $this- >projectid = $projectid;
  30. if(in_array(strtolower($moudle),$this->moudle_array))
  31. $this->moudle = $moudle;
  32. else 종료;
  33. switch($this->moudle) {
  34. 케이스 'udata':
  35. $this->CI->load->model('mupload_data','model');
  36. break;
  37. 케이스 'tdata':
  38. $this->CI->load->model('taskdata','model');
  39. break;
  40. 케이스 'tresult':
  41. $this->CI->load->model('taskresult','model');
  42. break;
  43. 케이스 'dresult':
  44. $this->CI-> load->model('dmsresult','model');
  45. break;
  46. 기본값:
  47. break;
  48. }
  49. $pattern = '/] ?)/i';
  50. $content = preg_replace_callback( $pattern, array($this, 'image_replace') , $content ) ;
  51. $pattern = '/] ?)/i';
  52. $content = preg_replace_callback( $pattern , array($this, 'html_replace') , $content );
  53. $pattern = '/] ?) /i';
  54. $content = preg_replace_callback( $pattern, array($this, 'iframe_replace') , $content );
  55. $pattern = '/] ?)/i';
  56. $content = preg_replace_callback( $pattern, array($this, 'frame_replace'), $content );
  57. $pattern = '/window.open([( ] ?)(['" ] ?)( . ?)([ )] ?)/i';
  58. $content = preg_replace_callback( $pattern, array($this, 'js_replace'), $content );
  59. $pattern = '/배경(. ? )url([( ])(['" ] ?)(. ?)([ ) ?])/i';
  60. $content = preg_replace_callback( $pattern, array($this, 'css_replace'), $ content);
  61. return $content;
  62. }
  63. 비공개 함수 image_replace($matches) {
  64. if(count($matches) < 4) return '';
  65. if ( 비어 있음($matches[3]) ) return '';
  66. $matches[3] = rtrim($matches[3],''"/');
  67. //获取图文字id
  68. $parent_dir_num = substr_count( $matches[3], '../');
  69. $relative_dirname = $this->relative_dirname;
  70. for($i=0; $i<$parent_dir_num; $i ) {
  71. $relative_dirname = substr( $relative_dirname, 0, strrpos($relative_dirname,"/") );
  72. }
  73. $relativepath = rtrim($relative_dirname,'/') '/'.ltrim ($matches[3],'./');
  74. $image_id = $this->CI->model->get_id_by_path_and_project($relativepath,$this->projectid);
  75. //输출
  76. if( !empty($image_id) ) {
  77. if($this->moudle == 'dresult') {
  78. return "CI->config->item("base_url")."cdms/".$this->moudle."/readpic/$image_id?pid= ".$this->프로젝트 ID .$matches[2]. $matches[4];
  79. } else {
  80. return "CI->config- >item("base_url")."cdms/".$this->moudle."/picfile/$image_id?pid=".$this->projectid .$matches[2]. $matches[4];
  81. }
  82. } else {
  83. return " }
  84. }
  85. 비공개 함수 html_replace( $matches ) {
  86. if(count($matches) < 4) return '';
  87. if(empty($matches[3]) ) return '';
  88. //href 링크($matches[3])가 http, www 또는 mailto로 시작하는 경우 처리되지 않습니다.
  89. //if(preg_match('/^[http|www|mailto](. ? )/i',$matches[3]))
  90. // " $matches[3] = rtrim($matches[3],''"/');
  91. //앵커 포인트 처리
  92. if(substr_count($matches[3],' # ')>0)
  93. $matches[3] = substr($matches[3],0,strrpos($matches[3],'#'))
  94. //html ID 가져오기
  95. $parent_dir_num = substr_count( $matches[3], '../');
  96. $relative_dirname = $this->relative_dirname;
  97. for($i=0; $i<$parent_dir_num; $i ) {
  98. $relative_dirname = substr( $relative_dirname, 0, strrpos($relative_dirname,"/") );
  99. }
  100. $relativepath = rtrim($relative_dirname,'/') '/ '.ltrim($matches[3],'./');
  101. $txtfile_id = $this->CI->model->get_id_by_path_and_project($relativepath,$this->projectid);
  102. / /output
  103. if( !empty($txtfile_id ) ) {
  104. if($this->moudle == 'dresult') {
  105. return "moudle."/readfile/$txtfile_id ?pid =".$this->projectid .$matches[2].$matches[4];
  106. } else {
  107. return "CI->config->item("base_url")."cdms/".$this->moudle."/txtfile/$txtfile_id?pid=". $this ->projectid .$matches[2].$matches[4];
  108. }
  109. } else {
  110. return " }
  111. }
  112. 비공개 함수 iframe_replace( $matches ) {
  113. if (count ($matches) < 4) return '';
  114. if(empty($matches[3]) ) return '';
  115. $matches[3] = rtrim($matches[3],' '" /');
  116. //앵커 포인트 처리
  117. if(substr_count($matches[3],'#')>0)
  118. $matches[3] = substr($ match[ 3],0,strrpos($matches[3],'#'));
  119. //html ID 가져오기
  120. $parent_dir_num = substr_count( $matches[3], '../' );
  121. $relative_dirname = $this->relative_dirname;
  122. for($i=0; $i<$parent_dir_num; $i ) {
  123. $relative_dirname = substr( $relative_dirname, 0, strrpos( $relative_dirname, "/") );
  124. }
  125. $relativepath = rtrim($relative_dirname,'/') '/'.ltrim($matches[3],'./');
  126. $txtfile_id = $this->CI->model->get_id_by_path_and_project($relativepath,$this->projectid);
  127. //출력
  128. if( !empty($txtfile_id ) ) {
  129. if( $this->moudle == 'dresult') {
  130. return "CI- >config ->item("base_url")."cdms/".$this->moudle."/readfile/$txtfile_id?pid=".$this->projectid .$matches[2].$ match[4 ];
  131. } else {
  132. return "CI->config-> ;item( "base_url")."cdms/".$this->moudle."/txtfile/$txtfile_id?pid=".$this->projectid .$matches[2].$matches[4];
  133. }
  134. } else {
  135. return " }
  136. }
  137. 비공개 함수 frame_replace( $matches ) {
  138. if(count($matches) < 4) return '';
  139. if( 비어 있음($ matchs[3]) ) return '';
  140. $matches[3] = rtrim($matches[3],''"/');
  141. //앵커 포인트 처리
  142. if( substr_count($ matches[3],'#')>0)
  143. $matches[3] = substr($matches[3],0,strrpos($matches[3],'#'));
  144. / /html의 ID 가져오기
  145. $parent_dir_num = substr_count( $matches[3], '../');
  146. $relative_dirname = $this->relative_dirname;
  147. for($i =0; $ i<$parent_dir_num; $i ) {
  148. $relative_dirname = substr( $relative_dirname, 0, strrpos($relative_dirname,"/") );
  149. }
  150. $relativepath = rtrim($ 상대_디렉터리이름,'/ ') .'/'.ltrim($matches[3],'./');
  151. $txtfile_id = $this->CI->model->get_id_by_path_and_project($relativepath,$ this-> projectid);
  152. //출력
  153. if( !empty($txtfile_id ) ) {
  154. if($this->moudle == 'dresult') {
  155. return "< ;frame".$matches[1]."src=".$matches[2].$this->CI->config->item("base_url")."cdms/".$this-> ;moudle." /readfile/$txtfile_id?pid=".$this->projectid.$matches[2].$matches[4];
  156. }else {
  157. return "CI->config->item("base_url")." cdms/".$this->moudle."/txtfile/$txtfile_id?pid=".$this->projectid.$matches[2].$matches[4];
  158. }
  159. } else {
  160. return " }
  161. }
  162. 비공개 함수 js_replace( $matches ){
  163. if(count($matches) < 4) return '';
  164. if( 비어 있음($matches[3]) ) return '';
  165. //处理链接
  166. $arr_html = Split(',',$matches[3]);
  167. $href = $arr_html[0];
  168. $other = '' ;
  169. for($i=0; $i $other = $arr_html[$i].", ";
  170. $other = rtrim($other ,", ");
  171. $href =rtrim($href,''"');
  172. //관리锚点
  173. if(substr_count($href,'#')>0)
  174. return "window.open".$matches[1].$matches[2].$matches[3].$matches[4];;
  175. //获取html적id
  176. $parent_dir_num = substr_count ( $href, '../');
  177. $relative_dirname = $this->relative_dirname;
  178. for($i=0; $i<$parent_dir_num; $i ) {
  179. $relative_dirname = substr( $relative_dirname, 0, strrpos($relative_dirname,"/") );
  180. }
  181. $relativepath = rtrim($relative_dirname,'/') . '/'.ltrim($href,'./');
  182. $txtfile_id = $this->CI->model->get_id_by_path_and_project($relativepath,$this->projectid);
  183. //출출
  184. if( !empty($txtfile_id ) ) {
  185. if($this->moudle == 'dresult') {
  186. return "window.open".$matches[1]. $matches[2].$this->CI->config->item("base_url")."cdms/".$this->moudle."/readfile/$txtfile_id?pid=".$ this->projectid.$matches[2].','.$other.$matches[4];
  187. } else {
  188. return "window.open".$matches[1].$matches[ 2].$this->CI->config->item("base_url")."cdms/".$this->moudle."/txtfile/$txtfile_id?pid=".$this-> ;projectid.$matches[2].','.$other.$matches[4];
  189. }
  190. } else {
  191. return "window.open".$matches[1].$matches [2].$matches[3].$matches[4];
  192. }
  193. }
  194. 비공개 함수 css_replace( $matches ) {
  195. if(count($matches) < 5) return '';
  196. if(empty($matches[4]) ) return '';
  197. $matches[4] = rtrim($matches[4],''"/') ;
  198. //설명 ID
  199. $parent_dir_num = substr_count( $matches[4], '../');
  200. $relative_dirname = $this->relative_dirname;
  201. for($ 나는=0; $i<$parent_dir_num; $i ) {
  202. $relative_dirname = substr( $relative_dirname, 0, strrpos($relative_dirname,"/") );
  203. }
  204. $relativepath = rtrim($relative_dirname,'/') . '/'.ltrim($matches[4],'./');
  205. $image_id = $this->CI->model->get_id_by_path_and_project($relativepath,$this->projectid);
  206. //출현
  207. if( !empty($image_id) ) {
  208. if($this->moudle == 'dresult') {
  209. return "Background".$matches[1] ."url".$matches[2].$matches[3].$this->CI->config->item("base_url")."cdms/".$this->moudle." /readpic/$image_id?pid=".$this->projectid .$matches[3]. $matches[5];
  210. } else {
  211. return "Background".$matches[1]."url".$matches[2].$matches[3].$this->CI-> ;config->item("base_url")."cdms/".$this->moudle."/picfile/$image_id?pid=".$this->projectid .$matches[3]. $matches[5];
  212. }
  213. } else {
  214. return "Background".$matches[1]."url".$matches[2].$matches[3].$matches[4 ].$matches[3].$matches[5];
  215. }
  216. }
  217. }
  218. /* Myreplace.php 끝 */
  219. /* 위치: /application /libraries/Myreplace.php */
复代码


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