개발 Q&A

제목 fgetcsv를 사용하여 csv 파일의 데이터를 가져온 후 db에 데이터 등록 시 한글깨지는 문제
카테고리 PHP
글쓴이 정수리 작성시각 2018/03/26 13:52:04
댓글 : 1 추천 : 0 스크랩 : 0 조회수 : 9073   RSS

공공데이터포털에서 

csv파일을 다운받아 

웹페이지에 업로드하여 해당 파일에 있는 데이터를 db에 저장 할려고 합니다. 

현재 fgetcsv를 사용하여 데이터를 가져온 후 db에 저장하는 부분까지 구현하였는데 

한글데이터가 db에 저장하였을 때 db프로그램에서 확인하여 

한글 데이터가 들어가는 필드를 확인해보면 한글이 깨지거나 아예 안들어가 있네요;; 

웹페이지에서 데이터를 db에 저장하기 전에는 화면에 출력하면 정상적으로 출력이 됩니다. 

그리고 mb_detect_encoding()를 사용하여 해당 데이터의 언어셋을 확인해보면 

ASCII, UTF-8 이렇게 2가지가 있더라구요 

검색을 통해 확인해보니 ASCII로 작성된 파일의 경우 이미 UTF_8로 인코딩되어 있다는 자료를 보았습니다.(영문이여서 나름 해석한다고 해봤을시 저런의미 인것 같더라구요) 

그렇다보니 iconv를 사용하여 utf-8로변경하면 

Detected an illegal character in input string 

이 에러가 출력이 됩니다 ㅜㅜ 

또 이해가 안되는 부분은 언어셋이 utf-8인 데이터의 경우는 db에서 들어갔을 시에는 데이터가 안깨져야 할텐데 

그래도 깨져서 출력이 되네요;; 어떤부분을 수정,추가해야 csv파일의 한글데이터를 문제없이 db에 한글데이터가 깨지지 않고 들어 갈수 있을까요?

 

function load_gongssi($fileInfo)//csv파일에서 데이터를 가져오는 함수
	{
		
		 $i=0;
 		 $j = 0;
 		 $handle = fopen($fileInfo['full_path'], "r"); 
 		 $csvData = array();

 		while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) { //총 행 읽기
 			
 			if($i != 0) {
 				$csvData[$j] = array();
	 		    $num = count($data);//행별 데이터 총 데이터수
	 		   
	    	
	    		for ($c=0; $c < $num; $c++) { //행별 데이터 읽어오기
	   
	    			array_push($csvData[$j], $this->convert1($data[$c]));

	    		    if($c ==  $num-1) {

						array_push($csvData[$j], date('Y-m-d H:i:s'));	    	

	    		    }
	   			 } 


 				$j++;
 			}

 				$i++;
   			 
 		}		

 		fclose($handle);
 		
 		return $csvData;

	}

function RegitGongsiData($params)
	{
	
		
		$sql =  'insert into ri_gongsi(gsNum, gslawCode, gslawName, gsspecialCode, gsspecialName, gsjibun, gsstandardYear, gsstandardMonth, gsMoney, gsDay, gsYebu, gsWherther, gsadday) values(?,?,?,?,?,?,?,?,?,?,?,?,?)';

		foreach($params as $csv){

			//echo $csv[2].mb_detect_encoding($csv[2]).'<br>';
			
			$sql =  'insert into ri_gongsi(gsNum, gslawCode, gslawName, gsspecialCode, gsspecialName, gsjibun, gsstandardYear, gsstandardMonth, gsMoney, gsDay, gsYebu, gsWherther, gsadday) values(?,?,"'.$csv[2].'",?,?,?,?,?,?,?,?,?,?)';	

			$result = $this->db->query($sql,array(
				$csv[0], $csv[1], $csv[3], $csv[4] ,$csv[5],
				$csv[6], $csv[7], $csv[8], $csv[9], $csv[10], $csv[11],
				$csv[12]
			));
		}

		return $result;
	}

 

 다음글 html5 video 가 ie 에서 실행이안되요 도움이... (1)
 이전글 쪽지 삭제 기능 구현 질문 (2)

댓글

정수리 / 2018/03/26 13:56:17 / 추천 0

자체 해결하였습니다;

function convert1($str)
{
 
return iconv("EUC-KR", "UTF-8", $str);
}
추가하여 
 
array_push($csvData[$j], $this->convert1($data[$c]));
 
 
배열에 넣기전에 컨버팅 시켜 해결하였습니다;
 
euc-kr을 utf-8컨버팅시켜 해결됐네요;