사이트 내 전체검색
PHP
태그 정렬 프로그램 소스
로빈아빠
https://cmd.kr/php/369 URL이 복사되었습니다.

본문

<?
##### 기본 변수를 설정한다. #####
// 모든 입력값은 현재 파일이 존재하는 디렉토리를 기준을 입력한다.

$source_directory_name = ""; // 원본 파일의 디렉토리 명을 기입한다.
$source_file_name = "source.html"; // 원본 파일 명을 기입한다.

$target_diretory_name = ""; // 변환 후 저장될 디렉토리 명을 기입한다.
$target_file_name = "target.html"; // 변환 후 생성될 파일의 명을 기록한다.

$code_enter = "rn"; // 엔터코드 값을 입력한다.
$code_enter2 = "rnrn"; // 엔터코드 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_enter1", $now_record);
              $now_record = eregi_replace("(</table>)", "1$code_enter<!-- 테이블 No. $table_counter [끝] Depth : $table_depth -->", $now_record);
              $now_record = eregi_replace("(<script)", "<!-- 스크립트 [시작] -->$code_enter1", $now_record);
              $now_record = eregi_replace("(</script>)", "1$code_enter<!-- 스크립트 [끝] -->", $now_record);
              $now_record = eregi_replace("(<style)", "<!-- 스타일 [시작] -->$code_enter1", $now_record);
              $now_record = eregi_replace("(</style>)", "1$code_enter<!-- 스타일 [끝] -->", $now_record);
              $now_record = eregi_replace("(<form)", "<!-- 입력폼 [시작] -->$code_enter1", $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;
?>

저작자 : navyism

댓글목록

등록된 댓글이 없습니다.

PHP
871 (12/18P)

Search

Copyright © Cmd 명령어 3.15.17.60