resin + apache 에서 get방식의 인코딩 문제에 대해 질문 드립니다.

ntwiz의 이미지

Fedora5 기반에 Resin 3.0 + Apache 1.3.3 으로 구성하였습니다.

.jsp 인덱스에서 입력란에 "검색어"를 입력하고 submit을 날리면

String q = request.getParameter("param");
으로 값이 받아집니다.

그런데 이를 리스팅을 할 경우
\[ 1 2 3 4 5 6 \]

out.println("<\ a href=?msg="+ q+ "&pageNo="+i +" \ > "+ i+ "\\");
________________ a href=?msg="+ q+ "&pageNo="+i +" \ > "+ i+ "\
으로 처리합니다만,

... msg="+q ... 이부분에서 문제가 생깁니다.

띄어쓰기를 한 한글일경우 , 띄어쓰기 뒤부터의 글자를 잃어버리고 값을 넘깁니다.

그래서 URLEncode.encode(q)로 처리 했음에도

최초 인덱스에서 넘겨받은 (검색어: 네이버 ( %B3%D7%C0%CC%B9%F6 )) 를
URLEncode.encode(q)하게 되면 ( %EB%84%A4%EC%9D%B4%EB%B2%84 )게 되어서
요상한 문자열로 리턴됩니다.

URLEncode.encode()와 URLDecode.decode()만으로도 해결될까요?

이 문제를 어떻게 해결하면 될까요?

도움을 부탁드립니다.

purple의 이미지

질문에서 출력 부분이 명확하지 않아서 대충 짐작해 본 것입니다.

문제점이 몇가지 있네요.

1. resin 에서는 GET 으로 넘길 경우 따로 지정하지 않으면 utf-8 로 decode 합니다. get 으로 넘기는 파라미터를 제대로 받기 위해서는 웹 브라우저, resin, html 페이지 등에서 모두 잘 맞춰줘야 합니다.
2. 링크 태그(a)에서 href 속성값을 따옴표(")로 감싸지 않았습니다. 따라서 공백이 있으면 공백 뒤 내용이 빠지겠죠. html에서 속성값은 따옴표로 감싸는 게 표준이니까 따옴표로 감싸는 게 좋습니다.
3. charset 을 지정하지 않는 URLEncoder.encode, URLDecoder.decode 메서드는 deprecated 메서드입니다. charset 을 지정하는 메서드를 쓰십시오. 결과를 보니 utf-8 로 인코딩된 것 같네요.

anabaral의 이미지

1.
GET방식이란게, URL 뒤에다 붙이는 방식 말씀이신가요?
form 내의 input 태그들의 값을 GET방식으로 보낼때와는 달리 URL을 직접 구성해서 보낼 경우
브라우저 별로도 결과가 차이가 납니다. 대개는 브라우저에 결정된 인코딩을 먼저 시도해 인코드하지만
글자가 특이할 경우 안될 수도 있습니다.

2.
파라미터 잃어버리는 문제는 위에 쓰신 분 말씀이 정답인 것 같습니다만, 레진의 특성에 따른 문제도 고려해 보세요.
레진은 브라우저에서 보낸 스트림 디코드에 실패할 경우 그 파라미터 이후의 파라미터를 모조리 무시하는 경우가 가끔 있습니다.

3.
form submit으로 보내지 않고 URL에 직접 쓰는 파라미터의 경우
자바스크립트로 인코드를 미리 해서 보내는 걸 고려해 보세요.
다만 그럴 때 쓸 수 있는 함수는 escape(unicode), encodeURI(utf-8), encodeURIComponent(utf-8)이 있는데
이 셋이 모두 장단점이 다릅니다. (ajax, 특히 post까지 고려하면 마지막 것이 좋은데.. 쓰기가 불편함)

부랴부랴~~~

부랴부랴~~~

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.