질문 Q #8413
ci 한글문제 때문에 마음고생이 심하네요
아날로직 2009-04-13 22:15:32
처음에 한글을 디비에 입력하면 아예 공백으로 들어가는 문제가 있었습니다.

mb_convert_encoding 함수로 인코딩 해서 넣는것으로 일단 입력은 되었습니다만

또 다른 문제가 생겼습니다. 세션에 한글을 넣으니 세션이 완전히 사라져 버리는 문제인데요... 하아.. 이것참..

다른분들은 한글문제가 없는지 구글링 해봐도 저와 비슷한 케이스가 없는것 같네요.

아래는 문제의 코드 부분입니다.

$row = $query->row();
$user_name = iconv("UTF-8","EUC-KR",$row->user_name);

$this->load->library('session');
$this->session->set_userdata('user_id', $this->input->post('user_id'));
$this->session->set_userdata('user_name', $user_name);

저기서 마지막줄에 $user_name 대신에 아이디를 넣으면 정상작동 됩니다만... 한글만 넣으면 세션이 완전히 사라져 버립니다.

혹시 저와 같은 경험을 하신분들 없으신가요? 저는 세션을 디비에 넣고 있습니다.
답변 3
#1 아날로직 2009-04-13 22:22:31
,$row->user_name 을 그대로 넣어서 세션생성 후에 출력할때 iconv 나 mb_convert_encoding 같은함수로 로 바꿔주니까 일단 되긴 되는군요. 제 서버설정에 뭔가 문제가 있는것 같기도 하고.. 캐릭터셋.. 이거 뭔가 어렵네요~
#2 변종원(웅파) 2009-04-13 22:45:14
$user_name = iconv("UTF-8","EUC-KR",$row->user_name);

echo $user_name; // 이거 잘 나오는지 한번 보시구요.

db는 utf-8로 쓰시고 php파일은 euc_kr로 쓰시는거죠? 이유가 궁금합니다.

대세라기 보다는 둘다 utf-8로 쓰는 것이 좋습니다.


메뉴얼에 의하면 쿠키의 최대용량은 4kb입니다. 기존에 세션으로 만드는 데이터가 4kb를 넘는지도 체크해보시구요.

db세션을 쓰신다면 euc_kr로 만든걸 utf-8 db에 넣었다가 다시 빼내서 쓰다보면 꼬일 가능성이 농후하네요.

iconv로 euc_kr로 만들지 마시고 $user_name = iconv("UTF-8","EUC-KR",$this->session->userdata('user_name')); 이렇게 쓰시기 바랍니다.

코드상으로는 이상한 점이 없습니다.

이런 문제가 생기지않게 하는 제일 좋은 방법은 db, php파일 환경 모두 utf-8로 쓰시는 것입니다. ^^
#3 아날로직 2009-04-14 09:21:23
그렇군요 php 환경을 euc_kr 로 쓰는 이유는.. 몰라서 였습니다 커허허...
.htaccess 파일에 아래 두줄을 추가하고 에디터에서 파일속성을 utf-8로 바꿔주니 해결 됐습니다.
말씀대로 db 는 utf-8 환경이고요
AddDefaultCharset utf-8
php_value default_charset "utf-8"