티스토리 뷰

반응형

서버 자동감지로 접속되는데 접속하고 나면 한글이 깨지는현상

 

euc-kr로 저장된 파일인데 utf-8로 저장된 파일은 ftp상에 업로드 되면 깨져보이고 들쑥날쑥 정신없을때 좋은 코드

아래 코드를 만들어서 저장되어있는 파일 상태를 체크해보고

<?php
$directory = '/web/home/xxxxxxxx/html/home/down/';  // 서버의 파일 경로
$baseUrl = 'https://xxxxxxxx.kr/home/down/';        // URL 기본 경로
$logFile = $directory . 'log/log.txt';               // 로그 파일 경로

// 로그 파일 초기화
if (!file_exists(dirname($logFile))) {
    mkdir(dirname($logFile), 0755, true); // 로그 디렉토리가 없으면 생성
}
file_put_contents($logFile, "변환된 파일 목록:\n"); // 로그 파일 초기화

// 디렉토리 열기
if ($handle = opendir($directory)) {
    echo "파일 URL 목록:<br>\n"; // HTML 줄 바꿈을 위해 <br> 사용

    // 디렉토리 내 파일 반복
    while (false !== ($file = readdir($handle))) {
        $filePath = $directory . $file;
        $convertedFileName = '';

        // PDF 또는 MP3 파일인지 확인
        if (is_file($filePath) && (pathinfo($filePath, PATHINFO_EXTENSION) === 'pdf' || pathinfo($filePath, PATHINFO_EXTENSION) === 'mp3')) {
            // 파일 이름의 URL 인코딩 처리
            $encodedFileName = rawurlencode($file); // URL에 적합한 형식으로 인코딩
            // URL 생성
            $fileUrl = $baseUrl . $encodedFileName;

            // 파일 이름의 언어셋 감지
            $encoding = mb_detect_encoding($file, ["UTF-8", "EUC-KR", "ISO-8859-1", "SJIS", "Windows-1251", "Windows-1252", "ISO-8859-2"], true);
            // 인코딩을 감지하지 못한 경우 기본값 설정
            if ($encoding === false) {
                $encoding = "알 수 없음";
            } else {
                // EUC-KR로 인코딩된 파일 이름을 UTF-8로 변환
                if ($encoding === "EUC-KR") {
                    $convertedFileName = iconv("EUC-KR", "UTF-8//IGNORE", $file);
                    $fileUrl = $baseUrl . rawurlencode($convertedFileName); // 변환된 파일 이름으로 URL 다시 생성
                    file_put_contents($logFile, "$convertedFileName\n", FILE_APPEND);
                                            
                    // 새 파일로 저장하는 코드 (주석 처리)
                    // $newFilePath = $directory . $convertedFileName;
                    // rename($filePath, $newFilePath); // 파일 이름 변경
                }
            }

            // 파일의 마지막 수정 시간 가져오기
            $lastModifiedTime = date("Y-m-d H:i:s", filemtime($filePath));

            // HTML 링크 출력, 언어셋과 수정 시간을 함께 표시
            echo "<a href=\"$fileUrl\">$file</a> <span style=\"color: gray;\">($encoding, 수정 시간: $lastModifiedTime)</span><br>\n";
            
            // 변환된 파일 이름을 붉은색으로 출력
            if (isset($convertedFileName) && $convertedFileName) {
                echo "<span style=\"color: red;\">변환된 파일 이름: $convertedFileName</span><br>\n";
            }
        }
    }

    // 디렉토리 핸들 닫기
    closedir($handle);
} else {
    echo "디렉토리를 열 수 없습니다.";
}
?>

서버에서 언어셋 안바꿔주면 .htacess 로 임시로 바꿔서 써야한다.

AddDefaultCharset UTF-8

그래서 해당되는 가장 상단 폴더에 위치시켜놓고

조금 지나서 캐쉬좀 새로고쳐주다보면 utf-8로 고정되어있을거다.

알드라이브나 파일질라로 접속할때 언어셋 uft-8로 해당 서버 고정시켜놓으면 편함.

반응형
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함