[php] HTML 태그 정리하는 프로그램
로빈아빠
본문
HTML 태그 정리하는 프로그램
http://www.phpschool.com/gnuboard4/bbs/board.php?bo_table=tipntech&wr_id=37483
안녕하세요.
디자이너분들이 작성하신 HTML 태그를
프로그래머가 알아보기 쉽게 정렬해주는 프로그램입니다.
PHPer님들의 따끔한 지적 기다리겠습니다.
감사합니다.
http://www.phpschool.com/gnuboard4/bbs/board.php?bo_table=tipntech&wr_id=37483
안녕하세요.
디자이너분들이 작성하신 HTML 태그를
프로그래머가 알아보기 쉽게 정렬해주는 프로그램입니다.
PHPer님들의 따끔한 지적 기다리겠습니다.
감사합니다.
<? ##### 기본 변수를 설정한다. ##### // 모든 입력값은 현재 파일이 존재하는 디렉토리를 기준을 입력한다. $source_dir_name = "Source"; // 원본 파일의 디렉토리 명을 기입한다. $target_dir_name = "Result"; // 변환 후 저장될 디렉토리 명을 기입한다. $code_enter = "\r\n"; // 엔터코드 값을 입력한다. $code_enter2 = "\r\n\r\n"; // 엔터코드 2줄 값. $code_tab = "\t"; // 탭코드 값을 입력한다. // $code_space = ""; // 스페이스코드 값을 입력한다. $upper_char = false; // 대문자로 변환 (true | false) $explain = true; // 주석문 사용 여부 (true | false) $coma = false; // 쌍따옴표를 홋따옴표로 변경한다. (true | false) ?> <html> <head> <title>Tag Arrager</title> <link rel='stylesheet' type='text/css' href='style_admin_default.css'> <style> <!-- .list_title td {padding-left:10px; padding-right:10px} //--> </style> </head> <body> <table width=100% height=100% border=0> <tr height=40><td align=center style='font-size:14px; font-weight:bold'>{ 변환된 각 파일에 대한 정보 출력 }</td></tr> <tr> <td valign=top align=center> <table border=1> <tr class=list_title> <td>파일명</td> <td><TABLE></td> <td><TR></td> <td><TD></td> </tr> <? ##### 마이크로 타임을 구하는 함수 ##### function get_microtime($mode="") { if(!$now_time) {$now_time = microtime();} $microtime = explode(" ", $now_time); switch($mode) { case "" : case "sum" : // 초와 마이크로초를 합해서 반환 $result = $microtime[1] + $microtime[0]; break; case "micro" : // 마이크로초만 반환 $result = $microtime[0]; break; } return $result; } ##### 프로그램 처리 시간을 계산하기 위한 초기값 설정 ##### $start_time = get_microtime(); ##### 폴더의 파일 수 만큼 반복한다. ##### $not_file = array(".", ".."); // 작업 대상 제외 파일 $open_dir = opendir($source_dir_name); while($source_file_name = readdir($open_dir)) { if(!in_array($source_file_name, $not_file)) { ##### 파일을 배열변수(줄단위) 형태로 가져온다. ##### $source = file($source_dir_name . "/" . $source_file_name); $source_counter = sizeof($source); $table_depth = 0; // 테이블 깊이를 초기화 한다. unset($table_counter_array); // 테이블 카운터 배열을 초기화 한다. ##### 치환 부분 ##### for($i = 0; $i < $source_counter; $i++) { $now_record = $source[$i]; ##### 스크립트 시작 시점을 확인한다. ##### if(eregi("(<script)", $now_record)) {$script_line = 1;} if(eregi("(<style)", $now_record)) {$style_line = 1;} ##### 각줄의 앞뒤 공백을 제거한다. ##### $line_check = $script_line + $style_line; ##### 공백을 제거한다. ##### if(!$line_check) {$now_record = trim($now_record);} else {$now_record = rtrim($now_record);} ##### 공백줄이 아니라면 타겟 배열변수에 입력한다. ##### if($now_record) { ##### 테이블 테그의 깊이값을 체크한다. ##### if(eregi("(<table)", $now_record)) { $table_depth++; $table_counter_array[$table_depth]++; } // end IF $table_counter = $table_counter_array[$table_depth]; ##### <td><table> 형태와 </table></td> 형태의 뭉쳐진 테이블 태그를 분리한다. ##### $now_record = eregi_replace(">( )*<table", ">$code_enter<table", $now_record); $now_record = eregi_replace(">( )*</table>( )*<", ">$code_enter</table>$code_enter<", $now_record); $now_record = eregi_replace("</table>", "</table>" . $code_enter, $now_record); ##### <tr><td> 형태와 </td></tr> 형태의 뭉쳐진 테이블 태그를 분리한다. ##### $now_record = eregi_replace(">( )*</tr", ">$code_enter</tr", $now_record); $now_record = eregi_replace(">( )*<td", ">$code_enter<td", $now_record); $now_record = eregi_replace(">( )*</td", ">$code_enter</td", $now_record); ##### 기존 태그를 다른 형태의 같은 효과 태그로 변환 한다. ##### $now_record = eregi_replace("(<strong>)", "<b>", $now_record); $now_record = eregi_replace("(</strong>)", "</b>", $now_record); ##### 기본 태그를 정렬한다. ##### $now_record = eregi_replace("(<script|<style)", $code_enter2 . "\\1", $now_record); $now_record = eregi_replace("(</script>|</style>)", "\\1" . $code_enter2, $now_record); $now_record = eregi_replace("(<table|<form|<body)", $code_enter . "\\1", $now_record); $now_record = eregi_replace("(</table>|</form>|</body>)", "\\1" . $code_enter, $now_record); ##### 주석문을 추가한다. ##### if($explain) { $now_record = eregi_replace("(<table)", "<!-- 테이블 No. $table_depth-$table_counter [시작] Depth : $table_depth -->$code_enter\\1", $now_record); $now_record = eregi_replace("(</table>)", "\\1$code_enter<!-- 테이블 No. $table_depth-$table_counter [끝] Depth : $table_depth -->", $now_record); $now_record = eregi_replace("(<script)", "<!-- 스크립트 [시작] -->$code_enter\\1", $now_record); $now_record = eregi_replace("(</script>)", "\\1$code_enter<!-- 스크립트 [끝] -->", $now_record); $now_record = eregi_replace("(<style)", "<!-- 스타일 [시작] -->$code_enter\\1", $now_record); $now_record = eregi_replace("(</style>)", "\\1$code_enter<!-- 스타일 [끝] -->", $now_record); $now_record = eregi_replace("(<form)", "<!-- 입력폼 [시작] -->$code_enter\\1", $now_record); $now_record = eregi_replace("(</form>)", "\\1$code_enter<!-- 입력폼 [끝] -->", $now_record); $now_record = eregi_replace("(<input|<textarea|<select)", "<!-- 입력 -->\\1", $now_record); } ##### 결과값을 배열에 저장한다. ##### $target[] = $now_record; ##### 테이블 테그의 깊이값을 체크한다. ##### if(eregi("(</table>)", $now_record)) {$table_depth--;} ##### 테이블 테그의 오류 체크를 위한 처리 ##### if(eregi("(<table)", $now_record)) {$table_tag[table]++;} if(eregi("(</table>)", $now_record)) {$table_tag[table]--;} if(eregi("(<tr)", $now_record)) {$table_tag[tr]++;} if(eregi("(</tr>)", $now_record)) {$table_tag[tr]--;} if(eregi("(<td)", $now_record)) {$table_tag[td]++;} if(eregi("(</td>)", $now_record)) {$table_tag[td]--;} ##### 스크립트 종료 시점을 확인한다. ##### if(eregi("(</script>)", $now_record)) {$script_line = 0;} if(eregi("(</style>)", $now_record)) {$style_line = 0;} } // end IF } // end F ##### 정리된 태그들을 하나의 변수로 저장한뒤, 엔터코드 값으로 분리해준다. ##### // 중간 중간 삽입된 엔터코드를 분리하기 위해서임. $source_implode = implode($code_enter, $target); $source = explode($code_enter, $source_implode); unset($target); // 타켓 변수를 제거한다. $source_counter = sizeof($source); $tab_counter = 1; // 탭 카운트를 초기화 한다. for($i = 0; $i < $source_counter; $i++) { $now_record = $source[$i]; ##### 스크립트 시작 시점을 확인한다. ##### if(eregi("(<script)", $now_record)) {$script_line = 1;} if(eregi("(<style)", $now_record)) {$style_line = 1;} ##### 각줄의 앞뒤 공백을 제거한다. ##### $line_check = $script_line + $style_line; ##### 공백을 제거한다. ##### if(!$line_check) {$now_record = trim($now_record);} else {$now_record = rtrim($now_record);} if($now_record) { ##### 탭 간격을 설정한다. ##### // 테이블 태그와 스크립트 태그를 포함하면 탭을 증가한다. if(eregi("(<td)", $now_record)) {$tab_counter++;} ##### 탭의 수만큼 줄 앞에 탭을 추가한다. ##### if(!$line_check) { for($j = 1; $j < $tab_counter; $j++) {$now_record = $code_tab . $now_record;} } $target[] = $now_record; if(eregi("(</td)", $now_record)) {$tab_counter--;} } else {$target[] = "";} // end IF ##### 스크립트 종료 시점을 확인한다. ##### if(eregi("(</script>)", $now_record)) {$script_line = 0;} if(eregi("(</style>)", $now_record)) {$style_line = 0;} } // end F $target_implode = implode($code_enter, $target); // 배열에서 일반 변수로 모아준다. ##### 대문자 변환처리를 한다. ##### if($upper_char) { $target_implode = eregi_replace("(<script)", "<SCRIPT", $target_implode); $target_implode = eregi_replace("(</script>)", "</SCRIPT>", $target_implode); $target_implode = eregi_replace("(<style)", "<STYLE", $target_implode); $target_implode = eregi_replace("(</style>)", "</STYLE>", $target_implode); $target_implode = eregi_replace("(<body)", "<BODY", $target_implode); $target_implode = eregi_replace("(</body>)", "</BODY>", $target_implode); $target_implode = eregi_replace("(<table)", "<TABLE", $target_implode); $target_implode = eregi_replace("(</table>)", "</TABLE>", $target_implode); $target_implode = eregi_replace("(<form)", "<FORM", $target_implode); $target_implode = eregi_replace("(</form>)", "</FORM>", $target_implode); $target_implode = eregi_replace("(<tr)", "<TR", $target_implode); $target_implode = eregi_replace("(</tr>)", "</TR>", $target_implode); $target_implode = eregi_replace("(<td)", "<TD", $target_implode); $target_implode = eregi_replace("(</td>)", "</TD>", $target_implode); $target_implode = eregi_replace("(<input)", "<INPUT", $target_implode); $target_implode = eregi_replace("(<textarea)", "<TEXTAREA", $target_implode); $target_implode = eregi_replace("(</textarea>)", "</TEXTAREA>", $target_implode); $target_implode = eregi_replace("(<select)", "<SELECT", $target_implode); $target_implode = eregi_replace("(</select>)", "</SELECT>", $target_implode); } // end IF ##### 쌍따옴표를 홋따옴표로 변경한다. ##### if($coma) { $target_implode = eregi_replace("\"", "'", $target_implode); } // end IF ##### 완성된 내용을 파일로 저장한다. ##### $write_file = fopen($target_dir_name . "/" . $source_file_name, w); // 파일을 저장 형태로 열어준다. if(!fwrite($write_file, $target_implode)) { echo "변환된 완성 파일 저장에 실패했습니다."; exit; } // end IF fclose($write_file); ##### 배열변수를 초기화 시킨다 ##### unset($source); unset($target); ##### 리포트 출력 ##### foreach($table_tag as $key => $value) { if($value) {$table_tag[$key] = "<font color=red>" . $value . "</font>";} } // end FE echo " <tr class=list_items> <td style='padding-left:10px; padding-right:10px'>$source_file_name</td> <td>$table_tag[table]</td> <td>$table_tag[tr]</td> <td>$table_tag[td]</td> </tr>"; unset($table_tag); } // end IF } // end W closedir($open_dir); ##### 프로그램 처리 시간을 계산한다. ##### $process_time = round(get_microtime() - $start_time, 3); ?> </table> <table style='margin-top:10px'> <tr> <td> ※ 값이 0 이면 정상.<br> ※ 값이 양수이면 끝 태그가 부족한 경우.<br> ※ 값이 음수이면 시작 태그가 부족한 경우.<br><br> 프로그램 처리 시간: <?=$process_time?>초 </td> </tr> </table> </td> </tr> </table> </body> </html>
관련링크
댓글목록
등록된 댓글이 없습니다.