UTF-8로 넘어가는 URL의 CGI파라메터에 한글이 들어간 경우 IE의 동작 버그?

raymundo의 이미지

안녕하세요,

UTF-8 URL 얘기는 사실 몇 년 전부터 KLDP에서 자주 봤던 얘깁니다만... 아래 언급하겠지만 단순히 파일명에 한글이 들어간 경우와, CGI스크립트의 GET 메쏘드로 넘어가는 인자에 한글이 있는 경우의 동작이 또 다르고, 결정적으로 "브라우저의 버그가 아닌지"라고 생각되는 부분이 있어서요. 검색을 해도 정확히 이 케이스에 관한 글을 잘 찾지를 못해서 문의를 드립니다.

첨부 그림의 첫번째 스샷은 u.html 이라는 웹 페이지를 브라우저로 보고 있는 상황이고, 이 u.html 의 본문은 UTF-8로 인코딩되어 있습니다.

그 페이지에는 어떤 CGI 스크립트로 링크가 되어 있고, 여기서는 (그림에서 보시다시피) "?"뒤에 "안녕하세요"라는 파라메터를 주고 스크립트를 부릅니다.

이 링크를 클릭하면 Internet Explorer 6.0 은 URL을 무조건 UTF-8로 인코딩해서 요청을 보냅니다. ("URL을 항상 UTF-8로 보냄" 옵션에 관계없이, UTF-8로 인코딩된 페이지 내의 링크를 클릭하면 그 링크 주소도 UTF-8로 보낸다는 걸 다른 테스트를 통해 확인했습니다")

두번째 스샷을 보시면... 그 스크립트 simple.pl 은 자기가 받은 파라메터를 화면에 출력하고, 그 파라메터 스트링이 UTF-8로 인코딩되어 있다고 가정하여 EUC-KR로 변환한 후, 변환 결과를 두번째 줄에 출력합니다. (스크립트의 출력 인코딩은 EUC-KR)

이 경우 UTF-8로 인코딩된 게 맞으니 아래 변환은 제대로 "안녕하세요"가 나와야 하는데, 그림을 보시다시피 이상하게 깨져 나옵니다.

세번째 스샷은 같은 상황을 linux에서 mozilla 로 한 겁니다. 원하는대로 제대로 변환되어서 나옵니다.

저 u.html 에 있는 링크를 클릭하는 순간 아파치의 access log 를 보면

/cgi-bin/simple.pl??\x88\xeb\x85Wx95?\x98\xec\x84\xb8? -- IE
/cgi-bin/simple.pl?%EC%95%88%EB%85%95%ED%95%98%EC%84%B8%EC%9A%94 -- Mozilla

위와 같이 애초에 브라우저의 요청 자체가 서로 다릅니다. 그런데 IE 쪽은 중간 중간에 물음표가 들어 있고 모질라에 비해 코드값이 적은 등 불완전한 값을 보내고 있습니다.

IE의 버그이고 해결 방법이 없는 걸까요? 아니면 버그가 아니라 나름대로 생각해서 한 행동이고 저 요청값을 다르게 해석할 여지가 있는 걸까요? 구글링을 해봐도 utf-8 url에 관한 글은 많은데 저렇게 CGI의 경우를 얘기하는 걸 못 찾았습니다.

(애초에 링크 자체가 스크립트가 아니라 한글 파일명. 즉 ...kr/한글.txt 와 같은 형태의 경우는 제대로 처리되는 것을 확인했습니다)

----------------------
여담:

"애초에 u.html 쪽에서, 파라메터에 한글이 있는 경우 %인코딩을 시켜서,
simple.pl?안녕하세요 대신에
simple.pl?%EC%95%88%EB%85%95%ED%95%98%EC%84%B8%EC%9A%94
로 링크를 걸면 됩니다"

라는 말씀을 하실 수도 있겠는데 ^^; 그건 저도 압니다. 그런데 저렇게 URL 자체를 눈으로 봤을 때 전혀 이해할 수 없는 형태로 쓰기 싫어서, 어떻게든 한글을 그대로 넣고 쓸 수 있게 하고 싶은 거라서요.

File attachments: 
첨부파일 크기
Image icon utf8_address.png107.63 KB
송효진의 이미지

버그 맞고요 ? 를 없애고 / 로 구성해야죠.
방법은 아파치 mod_rewrite 를 이용하시면 됩니다.

emerge money

raymundo의 이미지

결국 버그였군요 ㅠ,.ㅠ

좋은 하루 되세요!

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.