메뉴 건너뛰기

Dev tips

http://deculture.egloos.com/481566?89a004e0
오늘 일하다 발견한 건데.. 페이지는 신나게 UTF-8로 작성하였지만 정작 form에서 호출할 페이지가 euc-kr이라면?!!

당연하게도, 한글 등등이 살포시 깨져 주셔서 우리를 절망의 늪으로 몰아 갈 것입니다. (OTL...)



첫 번째 대처법은 아래와 같습니다.

<form name="fm" method="POST" action="" accept-charset="euc-kr">
    ......
</form>

즉, form 태그 내의 속성값으로 accept-charset 을 주는 것이지요.



그런데, 한 가지 문제가 발생합니다. '이 잘난 IE님께서는 표준 규약을 가비얍게 무시해 주신다는 거지요!'

그덕에, 위의 태그로는 IE에서 전혀 절대 네버 우리가 원하는 동작이 발생하지 않게 됩니다.



여기서 두 번째 대처법이 등장합니다.

document.charset = 'euc-kr';

즉, document의 charset을 명시적으로 euc-kr로 변환하는 것으로써, IE에서 정상적인 수행이 가능합니다.



하지만, 벗뜨, 그러나... 위의 두 가지 대처법을 동시에 쓰면 바로 애러가 발생합니다.

네, 당연하게도 두 번째 대처법인 document.charset = 'euc-kr'; 를 사용할 경우 '이제는 FireFox에서 정상적으로 안 돌아갑니다.'

... OTL...





그래서, Cross-Browsing과 여타 등등을 고려한 완성된 코드는 아래와 같이 작성됩니다.

form 부분:
<form name="fm" method="POST" action="" accept-charset="euc-kr">
    ......
</form>

script 부분:
<script type="text/javascript">
    var defCharset=document.charset;

    function doSubmit() {

        ......

        if (/MSIE/.test(navigator.userAgent)) {
            document.charset = 'euc-kr';
        }

        document.fm.submit();

        document.charset=defCharset;
    }
</script>


굳이 기존 charset을 저장하여 두는 이유는, document.charset으로 charset을 변경하였을 경우

'뒤로가기' 나 history.back() 을 통한 이전 페이지 호출시 문자가 깨질 수 있기 때문입니다. - charset이 변했으므로



저와 비슷한 고민을 하시는 분들이 어서 그 수고로움을 덜기 바라면서... +_+