[php] HTML 태그 정렬 하는 소스
로빈아빠
본문
HTML 태그 정렬 하는 소스
<? ##### 기본 변수를 설정한다. ##### // 모든 입력값은 현재 파일이 존재하는 디렉토리를 기준을 입력한다. $source_directory_name = ""; // 원본 파일의 디렉토리 명을 기입한다. $source_file_name = "source.html"; // 원본 파일 명을 기입한다. $target_diretory_name = ""; // 변환 후 저장될 디렉토리 명을 기입한다. $target_file_name = "target.html"; // 변환 후 생성될 파일의 명을 기록한다. $code_enter = "\r\n"; // 엔터코드 값을 입력한다. $code_enter2 = "\r\n\r\n"; // 엔터코드 2줄 값. $code_tab = "\t"; // 탭코드 값을 입력한다. $upper_char = true; // 대문자로 변환 (true | false) ##### 파일을 배열변수(줄단위) 형태로 가져온다. ##### if($source_diretory_name) {$source_file = $source_diretory_name . "/" . $source_file_name;} else {$source_file = $source_file_name;} $source = file($source_file); $source_counter = sizeof($source); $table_depth = 0; // 테이블 깊이를 초기화 한다. $table_counter = 0; // 테이블 카운터를 초기화 한다. ##### 처리부분 ##### for($i = 0; $i < $source_counter; $i++) { $now_record = trim($source[$i]); // 각줄의 앞뒤 공백을 제거한다. if($now_record) { // 공백줄이 아니라면 타겟 배열변수에 입력한다. if(eregi("(<table)", $now_record)) { $table_depth++; $table_counter++; } ##### <td><table> 형태와 </table></td> 형태의 뭉쳐진 테이블 태그를 분리한다. ##### $now_record = eregi_replace("(><table)", ">$code_enter<table", $now_record); $now_record = eregi_replace("(</table><)", "</table>$code_enter<", $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); ##### 주석문을 추가한다. ##### $now_record = eregi_replace("(<table)", "<!-- 테이블 No. $table_counter [시작] Depth : $table_depth -->$code_enter\\1", $now_record); $now_record = eregi_replace("(</table>)", "\\1$code_enter<!-- 테이블 No. $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)", "<!-- 입력 -->\\1", $now_record); $target[] = $now_record; if(eregi("(</table>)", $now_record)) {$table_depth--;} } } ##### 정리된 태그들을 하나의 변수로 저장한뒤, 엔터코드 값으로 분리해준다. ##### // 중간 중간 삽입된 엔터코드를 분리하기 위해서임. $source_implode = implode($code_enter, $target); $source = explode($code_enter, $source_implode); unset($target); // 타켓 변수를 제거한다. $source_counter = sizeof($source); $tab_counter = 0; // 탭 카운트를 초기화 한다. for($i = 0; $i < $source_counter; $i++) { $now_record = trim($source[$i]); // 각줄의 앞뒤 공백을 제거한다. if($now_record) { ##### 탭 간격을 설정한다. ##### // 테이블 태그와 스크립트 태그를 포함하면 탭을 증가한다. if(eregi("(<style)", $now_record)) {$tab_counter += 2;} if(eregi("(<table|<script)", $now_record)) {$tab_counter++;} ##### 탭의 수만큼 줄 앞에 탭을 추가한다. ##### for($j = 1; $j < $tab_counter; $j++) {$now_record = $code_tab . $now_record;} $target[] = $now_record; if(eregi("(</style>)", $now_record)) {$tab_counter -= 2;} if(eregi("(</table>|</script>)", $now_record)) {$tab_counter--;} } else {$target[] = "";} } $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); } ##### 파일의 저장위치를 결정한다. ##### if($target_diretory_name) {$target_file = $target_diretory_name . "/" . $target_file_name;} else {$target_file = $target_file_name;} ##### 완성된 내용을 파일로 저장한다. ##### $write_file = fopen($target_file, w); // 파일을 저장 형태로 열어준다. if(!fwrite($write_file, $target_implode)) { echo "변환된 완성 파일 저장에 실패했습니다."; exit; }; fclose($write_file); echo "변환에 성공하여, $target_file 에 저장되었습니다."; exit; ?>
관련링크
댓글목록
등록된 댓글이 없습니다.