폼 데이터를 utf-8에서 euc-kr로 넘길 때 한글 깨짐 해결
보통은 하나의 인코딩을 사용하지만 필요에 따라 외부 모듈을 사용하거나 할 때 인코딩이 달라 한글이 깨지는 경우가 의외로 많다. 대표적인 경우가 PG 결제 모듈 연동 작업이다. 이번에 스마트폰 결제 모듈을 작업하는데 상품명과 주문자의 이름이 깨져서 엄청 고민했다. 그리고 스마트폰 결제 모듈은 왜 이렇게 복잡한건지.. 혀~ utf-8 환경에서 euc-kr 환경으로 폼 데이터를 전송할 경우 폼 데이터를 euc-kr로 변환해서 전송해야 하는데 form 속성에 accept-charset=”euc-kr” 속성을 추가해 주면 된다.
<form name="order" method="post" accept-charset="euc-kr">
다만 이렇게 했을 경우 문제는 폼안에 있는 데이터를 DB에 저장할 경우 문자셋을 euc-kr 로 변경했기 때문에 한글이 깨져서 저장될 수 있을 것이다. 결제때문에 문자셋을 변경했는데.. DB 저장때문에 또 변경을 해야하는 상황.. 에혀~
아직 테스트를 해본 것은 아니지만 해결책으로 두 가지가 가능하지 않을까 싶다.
1. DB에 데이터를 저장할 때 iconv 함수를 이용해서 문자셋을 변경해서 저장하는 방법
2. form의 accept-charset 속성을 다시 utf-8로 변경하는 방법
어떤 것을 사용할지는.. 사실 2번이 코드는 더 간단할 것 같은데.. 테스트를 해봐야 결과를 알 수 있을 것 같다.
덧, accept-charset 속성이 IE에선 적용되지 않는다고 한다. 표준 속성인데 IE에선 안된다니.. 에혀~