CI 묻고 답하기

제목 model에서 데이터를 가져와서 var_dump를 사용하여 데이터를 확인했을 때 데이터가 깨지는 문제
글쓴이 정수리 작성시각 2016/07/18 08:57:39
댓글 : 8 추천 : 0 스크랩 : 1 조회수 : 14851   RSS

몇일전부터 계속.., 캐릭터셋 문제를 해결을 못해 멘붕이네요...

phpshcool 포럼에서도 찾아보고 여쭈어보아 올라온댓글을 참고하여

해보았지만 다 실패....

 

그래서 천천히 해볼려고 합니다 ㅜㅜ

일단 model에서

$query = $this->db->query('select gg_name from gigwan');

 

$result =  $query -> result();

 

var_dump($result);

 

var_dump를 통해 확인 했을 경우

 

데이터가 다깨져잇네요;

 

모델파일의 경우 인코딩 방식은 ANSI 이구여

 

서버의 mysql 캐릭터셋은 ecu-kr입니다

 

웹상에서 마우스 오른쪽을 클릭하고 인코딩 방식을 utf-8 or euc-kr로 변경을  해도 깨지는데 어디가 문제 일까요;

모델파일의 인코딩을 urf-8로 설정하고 봐도 깨지고 ANSI로 봐도 꺠지네요;

데이터의 경우 mb_detect_encoding함수를 사용했을 때 utf-8로 나와서 utf8로 바꿔줘도 깨지는건 똑같네요 ㅜㅜ

 

 다음글 로컬에선 잘 돌아가던 index 메소드가 서버에선 작동... (12)
 이전글 초보적인 질문좀 ... (2)

댓글

kaido / 2016/07/18 09:03:32 / 추천 0

캐릭터셋 euckr 이라니... 일단 깊은 한숨과 애도를 먼저 드리고.

 

캐릭터셋이 깨지는 이유는 종합적입니다.

1. db 드라이버 캐릭터 셋 체크

2. database 캐릭터 셋 체크

3. html 메타 태그 체크

4. 파일 자체에서 간혹 깨지는 경우. 파일의 캐릭터 셋 체크

5. 호스팅의 캐릭터셋 체크. [아주 간혹 웹 호스트 때문에 깨지기도 함]

6. 프로토콜에서 깨짐 [이건 PG사랑 통신 할 때인데 현재 문제하고는 상관없으니 참고로만 보세요]

 

보통 1-3번 안에서 해결 됩니다.

그리고 마우스 오른쪽으로 캐릭터셋 변경 하지 마시고, 태그를 넣어서 명확히 제시를 하세요. 메타 태그 캐릭터 셋으로 검색 하시면 나옵니다.

한대승(불의회상) / 2016/07/18 09:18:34 / 추천 0

한글이 깨지는 원인에 대해선 kaido님이 잘 설명해 놓으셔서 더 이상 할게 없구요.

 

소스코드를 아래 처럼 고쳐서 테스트 해보세요.

$this->db->query("set names 'euckr'");

$query = $this->db->query('select gg_name from gigwan');
$result =  $query -> result();

echo '<meta http-equiv="Content-Type" content="text/html; charset=euc-kr" />';

var_dump($result);

 

정수리 / 2016/07/18 09:53:29 / 추천 0

@한대승

답변감사드립니다 ㅜㅜ 

감사히 적어주신 코드대로 고쳐서 확인해보았지만 그래도 깨지네요 ㅜㅜ

정수리 / 2016/07/18 10:01:05 / 추천 0

@kaido

친절한 답변 감사합니다 

회사내인트라넷에 페이지를 추가하는 작업정도 인데

인트라넷 코드의 경우 제코드와 별 차이가 없는데 인트라넷은 한글이 안깨지고 제것만 깨지네요 ㅜㅜ

일단 말씀해주신 대로  확인해보았습니다.

1. mysql 드라이버 확인-> 이게 맞는지 모르겠지만 my.cnf파일을 확인하였는데 기본 캐릭터 셋이 euckr이구요

2. 데이터베이스 캐릭터셋 euckr인것을 확인하였습니다.

3. html 메타도<meta http-equiv="Content-Type" content="text/html; charset=euc-kr" /> 이렇게 명시 해주었지만 그래도 깨지네요 ㅜㅜ

4.파일 인코딩의 경우 에디트플러스를 통해 확인하여 인코딩 방식을 ANSI로 변경해주었습니다

5.호스팅같은 경우는  회사내 인트라넷이 euc-kr 캐릭터셋으로 잘돌아가고 있기에 문제가 없다고 판단됩니다

별 웹페이지의meta를 euc-kr, view폴더의 head.php 인코딩 방식 ANSI 으로 맞춰주었는데도 꺠지네요

kaido / 2016/07/18 10:32:59 / 추천 0
사실상 최종 솔루션 입니다.

컨트롤러에

header("Content-Type: text/html; charset=euc-kr");


모델에 쿼리 날리기 전에
$this->db->query("SET NAMES 'euc-kr' " );


 

정수리 / 2016/07/18 10:47:24 / 추천 0

@kaido 

답변감사합니다

다행히 utf-8로 확인해보니 데이터가 한글로 표기 되더라구요

그래서 euc-kr로 웹페이지를 하고 iconv함수를 통해 utf8를 euc-kr로 변경하니 한글이 잘출력됩니다 정말감사합니다.

한대승(불의회상) / 2016/07/18 12:40:03 / 추천 0

@정수리 다행이 아닌거 같군요. 실 DB는 euckr 이라고 하셨는데 테스트 환경에서는 DB가 UTF8 이라는 뜻이잖아요.

정수리 / 2016/07/18 13:24:35 / 추천 0

@한대승 

테스트환경에서 db를 사용하지 않고 실서버에서 바로 내려받고 수정후 바로올려서 실서버에서 확인중입니다