| 제목 | fgetcsv를 사용하여 csv 파일의 데이터를 가져온 후 db에 데이터 등록 시 한글깨지는 문제 | ||
|---|---|---|---|
| 카테고리 | PHP | ||
| 글쓴이 | 정수리 | 작성시각 | 2018/03/26 13:52:04 | 
|  | |||
| 공공데이터포털에서 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
                             | 
자체 해결하였습니다;