HTML 태그 정리하는 프로그램
페이지 정보
작성자 MintState 댓글 0건 조회 15,024회 작성일 08-11-03 11:01본문
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>|
|
댓글목록
등록된 댓글이 없습니다.





HTML 태그 정리하는 프로그램