MS IE 6 and 7 beta 2 encoding bugs in URLs query part 
MS IE 6 and 7 beta 2 encoding bugs in URL's query part
Test Conditions
- Page : UTF-8 encoding
- Browser : Always send URLs as UTF-8
- 1 ~ 4 : Multibyte characters in "path" and "query" part of URL
- 5 : Multibyte characters in only "path" part of URL
Intro
MS Internet Explorer uses a URL encoding policy which encodes URL's path and query part differently. (Query part is one that follows "?" character, eg http://example.com/search? q=blog )Encoding of query part is done with that of page, but IE don't escape that.(Opera escapes that.)
A "path?query" of URL is encoded as "%U(path)?U(query)".
U(x) means the value of UTF-8 encoding of character 'x'.
%U(x) means the value of percent-encoding of U(x).
For example, the encoding value of "Ä?Ä" in URL can be represented like %U(Ä)?U(Ä).
Final result is %C3%84% ? 0xC3 0x84
See Table : encoding bugs in URL's query part
Results
IE 6 didn't process the encoding of "query" part which have "multibyte UTF-8" characters.
And IE 7 beta2 also doesn't process that well. And that resulting encoded values are a little different with IE 6.
What is more, IE 7 doesn't process well "path" part that has "multibyte UTF-8" characters.(IE6 did well)
In Korean.
IE 7 beta 버그 리포팅에 알릴 겸 해서, 영어로 적었습니다. 내용은 간단합니다. 익스(internet explorer)에서는 주소를 인코딩하는 방법이 파폭이나 오페라랑 다릅니다. 흔히 주소라부르는 URL은 path와 query로 나눠 볼수 있는데 쿼리는 "?" 뒷부분을 일컫습니다. 주로 동적인 스크립트의 인자로 들어가는 값이 되죠.
익스에서는 이 쿼리부분을 주소가 박혀있는 페이지의 인코딩 값에 따라 인코딩합니다. 즉 "?가"라는 한글 쿼리가 euc-kr페이지에 박혀있으면 euc-kr로 인코딩한 값인 0xB0A1 2바이트로, utf-8 페이지에 박혀있으면 '가'의 utf-8인코딩 값인 0xEA0xB00x80 3바이트로 바꿉니다. 그런데 익스는 이 쿼리는 %인코딩하지 않고 전송합니다. 오페라는 쿼리도 %인코딩합니다.
문제는 익스6부터 이 쿼리 부분의 로 인코딩(raw encoding)이 멀티바이트 캐릭터(한글,가타나나,라틴어 등)에 대해선 부정확한 값으로 변환해서 전송한다는 것입니다.
익스7베타2에서 확인해봐도 역시나 쿼리부분의 인코딩이 정상적인 값이 아닙니다. 심지어, 익스6이랑 오류난 값조차 다릅니다. 이 말은 익스7에서 이부분의 루틴 수정이 있었는데, 그것도 바르지 못하다는 걸 뜻한다고 볼 수 있습니다.
더 이상한건, 적어도 익스6에선 쿼리 부분이 아닌 정상적(?)인 path 부분의 한글 등 멀티바이트 캐릭터의 utf-8인코딩은 정상적인 값으로 변환해서 전송했습니다.
http://alogblog.com/alog/archives/2005/10/03_무버블타입_3.2_용_alogblog인터페이스_플러그인/
예를 들면 위와 같이 쿼리가 없이 path로만 된 한글을 utf-8로 잘 인코딩해줍니다.
그런데 익스7베타2에서는 이 경로부분의 한글을 utf-8로 인코딩하는것도 에러가 납니다.
익스7에선 쿼리부분의 utf-8인코딩도 옵션에서 끄고 켤수 있는데, 그것은 주소창에 직접 입력한 값에만 적용되는거 같습니다. 어쨋거나 왜 이런 지극히 정상적이어야할 루틴 처리에서 에러가 있는지 몰겠네요.
테스트 결과 윈도의 코드페이지(cp949 등)의 인코딩으로의 쿼리 변환은 문제가 없는거 같습니다.(이건 다 체크 못했습니다)
Comments
앗 다시 떴군요!
UTF-8로 된 페이지에서 제 위키의 한글 페이지(URL에 한글이 포함된)를 링크한 경우에, 그 링크가 제대로 되지 않는 이유를 몰라서 한참을 끙끙대다가 결국 IE 쪽에서 버그가 있다는 걸 알았는데, 구글 검색해보니 이미 이 곳 등에서 언급이 되어 있더라고요. =.=; 근데 이 포스트는 서버 에러가 나서 구글 캐쉬에 있는 내용을 링크하고 그랬었는데... :-)
Posted by Raymundo {OpenPGP 서명} , 2007년 03월 9일 오후 1:05
* 데카원을 아십니까 ~
■한국인 체질에 맞는 천연생약초.허브고농축 *기능 강*화 제품 (미국FDA분류)
미국최고의 기술진에 의한 발#기부전퇴치의 일대 혁명 ! 신제품 ! FDA 승인 !
1알 복용으로 3-4일 지속, 강직도.발기력 비아그라보다 4배 이상
■-초강력 40분 이내 발#기 강력 유지!! *부작용 제로!!
100% 효능 보증
=> http://deca6.us.tc/ 방문인터넷 : www.deca6.us.tc
미국내직통: 0011-215-421-8766
■음주 후 발기가 안되면 Deca-one (데카원)을 찾으십시오!!
- 데카원은 반드시 결과가 나옵니다!
한국내 휴대폰전화요금으로 미국직통: 013-0299-7056,
문자주문.구매상담.문의.한글 문자메시지 가능: 013-0299-7056,
Posted by 데카원 , 2010년 01월 30일 밤 10:51
