본문 바로가기
Program/PHP

PHP - 파일 타입에 따라 인코딩 변환하기(utf-8/euc-kr) - file encoding 체크(파악)하기

by 너부리공작소 2020. 6. 18.
반응형

PHP - 파일 타입에 따라 인코딩 변환하기(utf-8/euc-kr) - file encoding 체크(파악)하기

PHP - 파일 타입에 따라 인코딩 변환하기(utf-8/euc-kr) - file encoding 체크(파악)하기

function fopen_utf8 ($filename, $mode) {
       $file = @fopen($filename, $mode);
       $bom = fread($file, 3);
       if ($bom != b"\xEF\xBB\xBF"){
           rewind($file, 0);
		   $utype = "euckr";
	   } else {
           echo "bom found!\n";
		   $utype = "utf8";
	   }
	Return $utype;		
}

$ftype = fopen_utf8($filename,"r");

    if($handle = fopen($filename, "r")) { // 	3/
            $i = 0; 
            while ($html_res = fgetcsv($handle, 5120000, ",")) {
                $html_cnt = count($html_res); 

				for ($j = 0; $j < $html_cnt; $j++) { 
                    $info[$j] = str_replace(">", "&gt;", $html_res[$j]); 
                    $info[$j] = nl2br(str_replace("<", "&lt;", $info[$j])); 
                 }   

					for($ii=0; $ii<50; $ii++) {
					if($ftype=='utf8') {
					echo "$ii>".iconv("utf-8","euc-kr",$info[$ii])." ^ ";
					} else {
					echo"$ii>$info[$ii] ^ ";
					}
				}
				echo"<br><br>";
			}
	}


fgetcsv를 이용해 csv 파일을 변환하려고 하는데 파일인코딩이 utf-8이 넘어오는 경우도 있고 euc-kr 이 넘어오는 경우가 있다. 

작업하는 서버환경이 euc-kr 환경이라 euc-kr로 바꿔서 처리해야 문제가 없다.

다른 여러가지 방법으로 테스트 해봤는데 위에 적어진 방법이 그나마 오류없이 처리가 된다. 

원본은 https://stackoverrun.com/ko/q/279063 여기에서 참고했다. 

# 정리 

1. PHP fgetcsv로 파일읽기

2. PHP fopen 으로 읽은 파일이 utf-8이면 euc-kr 로 iconv를 이용해 인코딩해서 사용.

3. euc-kr 타입이면 iconv 없이 바로 진행.

# 서버환경이 utf-8 환경이면 반대로 적용해도 된다. 

 

반응형

댓글