CI 묻고 답하기

제목 EUC-KR -> UTF-8 변환 질문드립니다
글쓴이 돼지바뿅뿅 작성시각 2015/11/19 10:53:50
댓글 : 11 추천 : 0 스크랩 : 0 조회수 : 17789   RSS
카드결제를 위해 pg사와 연동을 하였는데요,

pg사가 euc-kr을 사용을해서 저희쪽에서 보낼 때 form에 accept-charset="EUC-KR" 옵션을줘서 잘보내지긴합니다.

문제는 받아서 저희 쪽 디비에 넣을땐데요 mysql사용하고있고, 모바일 앱에서 사용중이구요.

iconv도 써보고, mb_convert어쩌구 써봐도 디비에 글이 다 깨져서 들어갑니다..

예를 그쪽에서 GET형식으로 test란 변수를 보내줄때

$test = iconv('EUC-KR', 'UTF-8', $_GET['test']);

$this->db->set('test', $test);

이런식으로 해봐도..DB에 입력은 다깨져서들어갑니다..

謬트, ()쨍커 이렇게..뭐 말도안되는글자가...

해결방법좀 알려주세요 ㅜ
 다음글 세션 아이디 중복 입력되는 에러 (2)
 이전글 게시판 입력 폼에서 엔터 적용되게 하는 방법? (1)

댓글

한대승(불의회상) / 2015/11/19 11:21:10 / 추천 0
1. $test 변수 변환된 값이 UTF8 인지 확인한다.
2. mysql table이 UTF8 인지 확인 한다.

이렇게 단계별로 점검 하면 되겠군요.
돼지바뿅뿅 / 2015/11/19 13:27:08 / 추천 0
@한대승

확인을해본 결과 pg사에서 받는값은 EUC-KR, mysql(DB)는 utf-8로 설정되어있습니다.  php파일 역시 utf-8로되어있구요...ㅠㅠ
kaido / 2015/11/19 13:38:21 / 추천 0
보내는쪽 form 태그에다가 accept-charset="euc-kr"  추가요.

왠지 그 pg사 어디인지 촉이 오네요.
들국화 / 2015/11/19 15:47:47 / 추천 0
DB에 깨져서 입력이 된건지 깨져 보이는지 확인해 보세요.
mysql의 서버, 클라의 charactor set을 확인 하세요.
돼지바뿅뿅 / 2015/11/19 16:52:46 / 추천 0
@kaido @들국화

pg사는 다우페이구요, utf-8로 변경해서 보내줄수 있냐 요청했더니, $_GET방식으로 url뒤에 파라미터로 붙여서 보내주는거라 불가하다고하네요..ㅜㅜ DB의 charactor set은 utf-8입니다 ㅜㅜ 확인해봤습니다 ㅜㅜ

받는 값 역시 체크 해봤습니다
$TEST_CHARSET = mb_detect_encoding($_GET['TEST'], "ASCII, EUC-KR, UTF-8, CP949");
$TEST = iconv($TEST_CHARSET , "UTF-8", $_GET['TEST']);

$this->db->set("TEST", $TEST); <<역시나 깨집니다...ㅜㅜ

그냥 받은 그대로 집어넣으면 도형과함께 이상한 글자들이 들어가고, 변환후 넣으면 한자와 쀏뾻같이 ...외계어로 들어갑니다..

$TEST_CHARSET을 출력했을때 EUC-KR 제대로 나오구요...

그상태에서 DB에서 꺼내도 깨진 그대로 출력이됩니다..ㅜㅜ

어떤게 문제일까요 ㅜ
한대승(불의회상) / 2015/11/19 17:06:31 / 추천 0
변환전 데이터가 EUCKR 로 제대로 들어오는지 확인 하시고 변환후 데이터가 UTF8 인지 확인 하세요.
kaido / 2015/11/19 17:15:27 / 추천 0
db 콜렉션도 확인해 보세요.
utf8_general_ci 

저도 오늘 pg사가 euc-kr로 넘겨주는 데이터 처리 하느라고 테스트 해보았습니다만

파일 utf-8 메타태그가 utf-8 이고 db가 utf-8 이고 넘겨받는 것이 euc-kr 입니다.

$resultMap = array();
foreach ($_REQUEST as $key => $value) {
                $resultMap[$key] = iconv("EUC-KR", "UTF-8", $value);
            }

넘겨 받는 값 그냥 싹다 치환해서 처리 했습니다.
돼지바뿅뿅 / 2015/11/19 17:32:06 / 추천 0
@한대승 @kaido

변화전 데이터가 utf-8로 변환되는것도 확인했습니다..
분명 변환은 되는데 왜깨지는걸까요 ㅜㅜ 

db콜렉션 역시 utf8_general_ci가맞구요..

알려주신대로 통으로 바꿔서 해보았는데..역시나 깨집니다 ..골아프네요 ㅜㅜ

 
한대승(불의회상) / 2015/11/19 17:56:06 / 추천 0
컬럼 문자셋도 확인해 보세요.
간혹 컬럼에 엉뚱한 문자셋이 지정되어 있는 경우도 있더군요.
들국화 / 2015/11/19 18:04:25 / 추천 0
깨진 데이타 인지 깨져 보이는지 체크하라는 거구요.
즉 클라이언트 설정도 utf8인지 확인해 보세요.
돼지바뿅뿅 / 2015/11/24 10:18:26 / 추천 0
몇일을삽질을했네요ㅜ  
_system/core/Utf8.php 파일의
clean_string함수의
$str = @iconv('UTF-8', 'UTF-8//IGNORE', $str); 부분을 주석처리했더니 바로해결됐습니다..ㅜㅜ 

답변달아주신분들 감사합니다 ㅜ 많이배웠습니다 ^^ 감기조심하세요.