JavaScript È°¿ëÆÁ
2009.02.08 / 23:57

JavaScript¿¡ À־ÀÇURLencodeÀÇ Ã³¸®

À¥°³¹ß
Ãßõ ¼ö 156
Á¦¸ñ¾øÀ½

JavaScript¿¡ À־ÀÇURLencodeÀÇ Ã³¸®

ÁÖ½Äȸ»ç Äí·¹½º

 

ÀÌ ¸Þ¸ð´Â ,JavaScript¿¡ ÄíÅ°¸¦ ó¸®ÇÏ´Â °æ¿ìÀÇ Æ÷ÀÎÆ®¸¦ °¡¸®ÄÑ ,URLencode¿¡ °ü·ÃµÇ´Â Æ®·¯ºíÀ» ȸÇÇÇØ Áֽô °ÍÀ» ¸ñÀûÀ¸·Î ÇÏ°í ÀÖ½À´Ï´Ù. ±ÞÇÑ °Í(ºÐ)ÆíÀº3Àå°ú4¾ÆÅ°¶ó¸¦ ÆÄ°ßÇØ ÀÐ¾î ¹Þ¾Æ »ó°üÇÏÁö ¾Ê½À´Ï´Ù. ¶ÇÇÑ ÀÌ ¸Þ¸ð´Â °¡´ÉÇÑ ÇÑIE¿¡ ºÁ ÁÖ¼¼¿ä.

 

¸ñÂ÷

1.  1¡¡ÄíÅ°¿ÍURLÀÎÄÚµù

2.  2¡¡URLÀÎÄÚµù°ú´Â

3.  3¡¡JavaScript¿¡ À־ÀÇescape()°úunescape()ÇÔ¼ö

4.  4¡¡JavaScript¿¡ À־ÀÇencodeURI,decodeURI,encodeURIComponent,decodeURIComponent

5.  5¡¡±×·¯¸é µµ´ëü ¾î¶»°Ô Çϸé ÁÁÀº°¡?

6.  6¡¡UTF-8ÀÇURLencode·µðÄÚµå ÇÔ¼öÀÇ ¿¹£º

ÇÁ·Î±×·¥¿¹

7.  7¡¡JSP°úJavaScript°£ÀÇ ÄíÅ°¿¡ ÀÇÇÑ µ¥ÀÌÅÍ ±³È¯¿¹

 

HTMLÅؽºÆ® ÀÌ¿Ü¿¡ À¥·¼­¹ö°¡ ºê¶ó¿ìÀú¿¡ Á¤º¸¸¦ °Ç³×ÁÖ´Â ¼ö´ÜÀº ,HTTPÀÀ´ä ¸Þ¼¼ÁöÀÇ Çì´õ ºÎºÐ¿¡ ±× Á¤º¸¸¦ ¼¼Æ® ÇÏ´Â °ÍÀÔ´Ï´Ù (º¸µð ºÎºÐ¿¡´Â Åë»óHTMLÅؽºÆ®°¡ µé¾î°©´Ï´Ù ). ¼­¹öÃøÀ¸·ÎºÎÅÍ´Â ÄíÅ° ¼³Á¤ÀÇ Çì´õÇàÀ̳ª ½º½º·Î ¸¸µç Ưº°ÇÑ Çì´õÇà¿¡ Á¤º¸¸¦ ¼¼Æ® ÇÒ ¼ö ÀÖ½À´Ï´Ù. À̰͵éÀº (À̸§ , °ª) ÀÇ Æä¾îÀÇ Çü½ÄÀ» ÃëÇÕ´Ï´Ù.

 

HTMLÅؽºÆ®¿Ü¿¡¼­ °Ç³×¹Þ´Â Á¤º¸´Â , ºê¶ó¿ìÀú È­¸é¿¡ Ç¥½ÃµÇÁö ¾Ê±â ¶§¹®¿¡ , Ç¥½ÃÀÇ ¸ñÀû ÀÌ¿ÜÀÇ ¼¼¼Ç °ü¸® µî¿¡ »ç¿ëµË´Ï´Ù. ¼­ºê ·¿¿¡ À־ÀÇ ÄíÅ°¿¡ ÀÇÇÑ ¼¼¼Ç À¯ÁöÀÇ ¸ÞÄ«´ÏÁòÀº , ¹Ù¾ßÈå·Î ÀÌ Æ¯¼ºÀ» ÀÌ¿ëÇÑ °ÍÀÔ´Ï´Ù. ¼¼¼Ç ÀÌ¿Ü¿¡µµ Ŭ¶óÀ̾ðÆ®¿ÍÀÇ °¢Á¾ °ü¸® Á¤º¸(ºê¶ó¿ìÀúÀÇ Å¸ÀÔÀ̳ª ¹öÁ¯ , À¯Àú Á¤º¸ µî ) , ¾Ïȣȭ¸¦ À§ÇÑ Á¤º¸(¿­¼è³ª ¹æ½Äµî ) ÀÇ ±³½ÅÀ̶ó°í ÇÏ´Â ÀÀ¿ëµµ »ý°¢ÇÒ ¼ö ÀÖ½À´Ï´Ù. ±×¸®°í º¸³½ ÄíÅ°´Â Ŭ¶óÀ̾ðÆ®¿¡ ÃàÀûµÇ¹Ç·Î , ¹Ýº¹ Ç¥½Ã³ª È­¸é¿¡ °øÅëÀÇ Á¤º¸¸¦ ÃÖÃÊ·Î ÄíÅ°·Î º¸³» ¹ö¸®´Â Àϵµ °¡´ÉÇÕ´Ï´Ù. ±×¸®°í , Æû¿¡ Ç¥½ÃÇÏÁö ¾Ê°í ÇÊ¿äÇÑ Á¤º¸¸¦ ¼­¹ö¿¡ µ¹·ÁÁÙ ¼öµµ ÀÖ½À´Ï´Ù.

 

¿¹¸¦ µé¾îTomcatµîÀÇ ¼­ºê ·¿·¿£ÁøÀÌ ¼¼¼Ç À¯Áö¿¡ »ç¿ëÇÏ°í ÀÖ´Â(¡°jsessionid¡±, ID)ÀÇ Á¾·ùÀÇ ¸ÞÄ«´ÏÁò ÀÌ¿Ü¿¡ , Á» ´õ »ó¼¼ÇÏ°Ô ±× ¼¼¼ÇÀÇ Á¤º¸(À¯ÀúÀÇ À̸§µî ) ¸¦ Ŭ¶óÀ̾ðÆ®·Î À¯ÁöÇØ , ÇÊ¿äÇÏ°Ô ÀÀÇÏ°í ÀÌ°ÍÀ» Ç¥½ÃÇÏ´Â µîÀÌ °¡´ÉÇÏ°Ô µË´Ï´Ù.

 

JavaScript¿¡ À־´Â ,HTTPÀÀ´ä ¸Þ¼¼ÁöÀÇ Çì´õÇàÀ» Á÷Á¢ ²¨³»´Â ±â´ÉÀº À¯°¨½º·´Áö¸¸ ¾ø½À´Ï´Ù. ±×·¸Áö¸¸Window.document.cookie¿ÀºêÁ§Æ®¸¦ »ç¿ëÇØ , ÄíÅ°¸¦ °³ÀÔ½ÃŲ Á¤º¸ÀÇ ±³È¯ÀÌ °¡´ÉÇÕ´Ï´Ù. ±×·¸Áö¸¸ , Èļú°ú °°ÀÌHTTP¸Þ¼¼ÁöÀÇ Çì´õÇàÀºURLencode µÇÁö ¾Ê½À´Ï´Ù. ASCIIij¸¯ÅÍ ¼¼Æ®¸¸À¸·Î ³¡³ª´Â ±¸¹Ì¿Í ´Þ¸® ¿ì¸®¿Í °°ÀÌ2¾Æ¸£¹ÙÀÌÆ®ÀÇ Ä³¸¯ÅÍ ¼¼Æ®¸¦ Ç¥ÁØÀûÀ¸·Î »ç¿ëÇÏ´Â °æ¿ì´Â ,URLencode¿¡ ÁÖÀÇÇÏÁö ¾ÊÀ¸¸é ¾ÈµË´Ï´Ù. ¿©·¯ºÐÀÌ °í¹ÎÇØ ±×¸®°í ¹®Á¦¸¦ ÀÏÀ¸Å°±â ½¬¿î °ÍÀº ÀÌ Á¡ÀÌÁö¿ä.

 

ÀÌ ¸Þ¸ð´Â ,JavaScript±×¸®°í ÄíÅ°¸¦ ó¸®ÇÏ´Â °æ¿ìÀÇ Æ÷ÀÎÆ®¸¦ °¡¸®ÄÑ ,URLencode¿¡ °ü·ÃµÇ´Â Æ®·¯ºíÀ» ȸÇÇÇØ Áֽô °ÍÀ» ¸ñÀûÀ¸·Î ÇÏ°í ÀÖ½À´Ï´Ù.

 


 

1.        ÄíÅ°¿ÍURLÀÎÄÚµù

 

ÄíÅ°¿ÍURLÀÎÄÚµùÀÇ ±âº»ÀûÀÎ Áö½ÄÀÌ ÇÊ¿äÇÏ°Ô µÇ±â ¶§¹®¿¡ , ÃÖÃÊ·Î ±× Æ÷ÀÎÆ®¸¦ ½Ç·Ê·Î °¡¸®Å°°Ú½À´Ï´Ù.

 

Åë»ócookieÀº ¾îÇø®ÄÉÀ̼Ƿ¼­¹ö°¡HTTPÀÀ´äÀÇ ÆÐŶÀÇ Çì´õ ºÎºÐ¿¡ ¼¼Æ® ÇØ ºê¶ó¿ìÀú¿¡ °Ç³×ÁÝ´Ï´Ù. ¿¹¸¦ µé¸éIBMÀÇ ¼­ºê ·¿·¿£ÁøÀº ´ÙÀ½°ú °°ÀºHTTPÀÇ Çì´õÇàÀ»HTTPÀÀ´ä¿¡ ºÙ¿© ¼¼¼Ç(¼­ºñ½º¿Í Ŭ¶óÀ̾ðÆ®¿ÍÀÇ ´ëÀÀÀÇ ½Äº°) ÀÇ À¯Áö¸¦ À̶ó°í ±ò¶§±â ÇÏ°í ÀÖ½À´Ï´Ù. ÀÌ ¿¹() ¿¡¼­´ÂsessionidÀ̶ó°í ÇÏ´Â ¡¸À̸§¡¹ÀÇ º¯¼ö¿ÍLV··µÇ´Â ¡¸°ª¡¹ÀÇ Á¶¸¦ °Ç³×ÁÖ°í ÀÖ½À´Ï´Ù.

Set-Cookie: sessionid=LV140HYAAAABZQ....;Path=/

ÀÌ¿Í °°ÀÌcookieÀºHTTPÆÐŶÀÇ Çì´õÇà¿¡ ÀÇÇØ Àü´ÞµÇ¹Ç·Î ,2¾Æ¸£¹ÙÀÌÆ® ¹®ÀÚ³ª¡±;¡±À̳ª¡±=¡±µîÀÌ À§ÇèÇÑ (ÇÁ·ÎÅäÄÝ »óÀǹ̸¦ °¡Áø´Ù ) ¹®ÀÚ¸¦ Æ÷ÇÔÇÑ ¡¸À̸§¡¹À̳ª ¡¸°ª¡¹À» °¡Áö´ÂcookieÀ» Ŭ¶óÀ̾ðÆ®¿¡ °Ç³×ÁÙ ¶§´Â , À§ÇèÇÑ ¾Æ¸£¹ÙÀÌÆ® ¹®ÀÚ¸¦ Æ÷ÇÔÇÏÁö ¾Ê°ÔURLencode ÇØ , ¾Æ¸£¹ÙÀÌÆ®¿­·Î¼­ Àü´ÞÇÏÁö ¾ÊÀ¸¸é µÇÁö ¾Ê½À´Ï´Ù.

 

¸ÖƼ ¾Æ¸£¹ÙÀÌÆ® ¹®ÀÚ¸¦ ¼­ºê ·¿·¿£ÁøÀº °ú¿¬ ÀÌ°ÍÀ» ÀνÄÇØ ÀÚµ¿ÀûÀ¸·ÎURLencode ÇØ ÁÖ´Â °ÍÀÏ±î ½ÇÇèÇØ º¾½Ã´Ù.

 

´ÙÀ½ÀÇ ¼­ºê ·¿Àº ³Ý»ó(http://ash.jp/java/hellocookie.htm)¿¡¼­ °ø°³µÇ°í ÀÖ´ø ÇÁ·Î±×·¥¿¡ ÀϺΠ¼Õº» °ÍÀÔ´Ï´Ù. ÀÌ ÇÁ·Î±×·¥Àº ¼­ºê ·¿¿¡ À־ÀÇ ÄíÅ° 󸮿¡ °üÇÑ ÈùÆ®°¡ µé¾î°¡ Àֱ⠶§¹®¿¡ , ´ëÃæ ÀÌÇØÇØ ÁÖ¼¼¿ä.

import java.io.*;

import java.net.*;

import javax.servlet.*;

import javax.servlet.http.*;

/** ÄíÅ° ÀÐ°í ¾²±â ¼­ºê ·¿ **/

public class HelloCookie0 extends HttpServlet {

  public void doGet (HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {

    PrintWriter out;

    Cookie[] cookies;

    Cookie cookie;

    // CookieÀÇ Ãëµæ

    cookies = req.getCookies();

    cookie = null;

    if (cookies != null){

      for(int i=0; i < cookies.length; i++) {

        cookie = cookies[i];

        if (cookie.getName().equals("HelloCookie")) { break; }

      }

    }

    res.setContentType("text/html; charset=Shift_JIS");

    out = res.getWriter();

    HttpSession session = req.getSession();  // SessionÀÇ Ãëµæ°ú ±âÀÔÇØ

    session.setMaxInactiveInterval(600);       // 10ºÐ°£ À¯È¿

    if (session.isNew()) {     // CookieÀÇ ±â·Ï

      cookie = new Cookie("HelloCookie", "Hello World!");

      cookie.setMaxAge(60);   // À¯È¿±â°£Àº1ºÐ ¿¡ ²÷¾îÁö´Â

      res.addCookie(cookie);

      out.println("<html><body>");

      out.println("<h1>Write Cookie</h1>");

      out.println("<p>¸®·Îµå ÇØ ÁÖ¼¼¿ä. </p>");

      out.println("</body></html>");

    } else {      // CookieÀÇ Ç¥½Ã

      out.println("<html><body>");

      out.println("<h1>");

      for(int i=0; i < cookies.length; i++) {

        cookie = cookies[i];

        out.println(cookie.getName()+" : "+ new String(cookie.getValue().getBytes("8859_1"), "Shift_JIS"));

        out.println("<BR>");

      }

      out.println("</h1>");

      out.println("<p>CookieÀÇ »ùÇÃ(HelloCookie0.java)</p>");

      out.println("</body></html>");

    }

  }

}

ÀÌ ÇÁ·Î±×·¥À¸·Îcookie = new Cookie("HelloCookie", "Hello World!");À̶ó°í ÇÏ´Â ÇàÀÇ ¡¸°ª¡¹ÀÇ Ä³¸¯ÅÍ ¶óÀο¡ ÇÑÀÚ³ª À§ÇèÇÑ ¹®ÀÚ¸¦ ¼³Á¤Çϸé(ÀÚ) ¼­ºê ·¿·¿£ÁøÀº ¾î¶°ÇÑ ÀÀ´ä ÆÐŶÀ» ¼Û½ÅÇÒ±î ½ÃÇèÇØ º¾½Ã´Ù.

 

a)       ¡±Hello ÀϺ»!¡±°ú ¹Ù²Ù¾îtelnetÀÇ ¼ÒÇÁÆ®¿þ¾î·Î ¾×¼¼½º Çϸé(ÀÚ) ´ÙÀ½°ú °°Àº °á°ú¸¦ ¾òÀ» ¼ö ÀÖ½À´Ï´Ù. ÃÖÃÊÀÇ2Çà(°ø¹éÇ൵ Æ÷ÇÔÇÑ´Ù ) ÀºtelnetÀÌ º¸³½HTTP¿ä±¸ ¸Þ¼¼ÁöÀÔ´Ï´Ù. ±× ÀÌÈÄ°¡ ¼­ºê ·¿·¿£Áø(¿©±â¿¡¼­´ÂTomcat) ÀÌ µ¹·ÁÁØHTTPÀÀ´ä ¸Þ¼¼ÁöÀÔ´Ï´Ù. Àü¹ÝÀÌ Çì´õ ºÎºÐ , ¸¶Áö¸·4ÇàÀÌ º¸µð ºÎºÐÀÔ´Ï´Ù. ±×·±µ¥HTTPÀÀ´äÀÇ Çì´õ ºÎºÐÀ» º¸¸é(ÀÚ) ,Set-CookieµÇ´Â Çì´õÇàÀÌ2Çà Á¸ÀçÇÏ´Â °ÍÀÌ ºÐ ºô¸®°íÁö¿ä. óÀ½Àº ¼­ºê ·¿ÀÌ ÀÛ¼ºÇÑ °ÍÀ¸·Î , ÈÄ ÀÇ °ÍÀº ¼­ºê ·¿·¿£ÁøÀÌ ¼¼¼Ç À¯Áö¸¦ À§ÇØ ÀÛ¼ºÇÑ °ÍÀÔ´Ï´Ù. µû¶ó¼­ , ºê¶ó¿ìÀú·Î ÇØ º¸¸é ,2°³ÀÇ ÄíÅ°°¡ °Ç³×¹Þ¾Ò´Ù°í ÇÏ´Â °ÍÀÌ µË´Ï´Ù. ºê¶ó¿ìÀúÃø¿¡¼­ ÀÌ·¯ÇÑ ÄíÅ°¿¡ ±»ÀÌ º¯°æÀ» ´õÇÏÁö ¾ÊÀ¸¸é , ¼­ºê ¹ÌÆ®·¹öÆ°µîÀ¸·Î ÀÌURLÀ» ÀçÂ÷ ¾×¼¼½º ÇßÀ» ¶§¿¡´Â , ÀÌ·¯ÇÑ ÄíÅ°´Â À¯È¿±â°£ÀÌ ²÷¾îÁöÁö ¾ÊÀ¸¸é ±×´ë·Î ¼­¹ö¿¡ µ¹·ÁÁÖ¾îÁý´Ï´Ù.

GET /examples/servlet/HelloCookie0 HTTP/1.0

 

HTTP/1.1 200 OK

Content-Type: text/html; charset=Shift_JIS

Connection: close

Date: Wed, 30 Oct 2002 03:45:24 GMT

Server: Apache Tomcat/4.0.4-b3 (HTTP/1.1 Connector)

Set-Cookie: HelloCookie=Hello ÀϺ»!;Expires=Wed, 30-Oct-2002 03:50:25 GMT

Set-Cookie: JSESSIONID=BAFB93DD6C7848751C369747B316DB6C;Path=/examples

 

<html><body>

<h1>Write Cookie</h1>

<p>¸®·Îµå ÇØ ÁÖ¼¼¿ä. </p>

</body></html>

 

b)       ±×·±µ¥ ÀÌHTTPÀÀ´ä ¸Þ¼¼Áö¸¦ º¸¸é(ÀÚ) ,telnetÀÇ ´ëÀÀ¹®ÀÚ ¼¼Æ®¸¦Shift_JISÀ¸·Î ÇßÀ¸¹Ç·Î , ¡°Hello ÀϺ»!¡±ÀÇ ºÎºÐÀº ¹®ÀÚ°¡ º¯ÇÏ°í¸¦ ÀÏÀ¸Å°Áö ¸»°í ¿Ã¹Ù¸£°Ô ÀоÁö°í ÀÖ½À´Ï´Ù. ±×¸®°í ,IE(v6)¿¡http://localhost:8080/examples/servlet/HelloCookie0°ú ¾×¼¼½º ÇØ , ¿©·¯ºÐÀÇPCÀÇC:\WINDOWS\CookiesÀ» Á¶»çÇϸé(ÀÚ) , ÀÌ ÄíÅ°°¡ ¹®ÀÚ°¡ ±úÁöÁö ¾Ê°í ¼ö¸®µÇ°í ÀÖ´Â °ÍÀÌ È®ÀÎÇÒ ¼ö ÀÖ°ÚÁö¿ä. ±×·¸Áö¸¸ , ½ÇÀº ÀÌ°ÍÀº , ¿ì¿¬È÷ ÀߵǾú´Ù°í ÇÒ »Ó(¸¸Å­)ÀÎ °ÍÀÔ´Ï´Ù. ¡±ÀϺ»¡±À̶ó°í ÇÏ´Â ¹®ÀÚ´ÂShift_JISÀ¸·Î¼­ Çì´õ¿¡ µé¾î°¡ ÀÖ½À´Ï´Ù¸¸ , ÀÌ ¾Æ¸£¹ÙÀÌÆ®¿­ÀÇ ¾î´À ¾Æ¸£¹ÙÀÌÆ®µµASCIIÀÇ ¡¸À§ÇèÇÑ ¹®ÀÚ¡¹¿¡ ¶³¾îÁöÁö ¾Ê±â ¶§¹®ÀÔ´Ï´Ù. ´õ¿í , ÀÌ ½ÇÇè¿¡¼­´Â ·ÎÄÃÀÇ È£½ºÆ®¸¦ »ç¿ëÇÏ°í ÀÖ¾î ³×Æ®¿öÅ©¸¦ °³ÀÔ½ÃÅ°°í´Â ÀÖÁö ¾Ê½À´Ï´Ù. ³×Æ®¿öÅ©ÀÇ ³ëµå¿¡ µû¶ó¼­´Â (³°Àº ½Ã½ºÅÛÀÔ´Ï´Ù¸¸ )7ºñÆ® ¹Û¿¡ Àü¼ÛµÇÁö ¾Ê°í , ÃÖ»óÁ¤µµÀÇ1ºñÆ®(MSB)Àº À߸øÇØ °ËÃâÀ̳ª µ¿±âµîÀÇ ¸ñÀûÀ¸·Î »ç¿ëµÇ°í ÀÖ´Â °Íµµ ÀÖ½À´Ï´Ù. ±×·¯ÇÑ ³ëµå¸¦ ÀÌHTTP¸Þ¼¼Áö°¡ Åë°úÇϸé(ÀÚ) , ´ç¿¬È÷ ¹®ÀÚ°¡ º¯ÇÏ°í¸¦ ÀÏÀ¸ÄÑ ¹ö¸³´Ï´Ù.

 

c)        À§ÇèÇÑ ¹®ÀÚ¸¦ Æ÷ÇÔÇÑ Ä³¸¯ÅÍ ¶óÀÎÀÌ ÄíÅ°ÀÇ ¡¸°ª¡¹ÀÇ Àå¼Ò¿¡ ¼¼Æ® µÇ¸é ¾î¶»°Ô µÉ±î¿ä? ÄíÅ°ÀÇ ¡¸À̸§¡¹¿¡ À§ÇèÇÑ1¾Æ¸£¹ÙÀÌÆ® ¹®ÀÚ°¡ Æ÷ÇԵǾî ÀÖÀ¸¸é(ÀÚ) ¼­ºê ·¿·¿£ÁøÀº ¿¹¿Ü¸¦ ÀÏÀ¸Å°µµ·Ï(µíÀÌ) ±ÔÁ¤µÇ°í ÀÖ½À´Ï´Ù¸¸ , ¡¸°ª¡¹¿¡´Â ±×·¯ÇÑ Á¦¾àÀÌ ¾î¶² (¶æ)ÀÌÀ¯ÀÏ±î ±ÔÁ¤µÇ°í ÀÖÁö ¾Ê½À´Ï´Ù. ½ÃÇè»ï¾Æ¡± AAA ;B%BB¡±°ú ½ºÆäÀ̽º¿Í ¼¼¹ÌÄÝ·ÐÀ» Æ÷ÇÔÇÑ ¹®ÀÚ¸¦ Ãâ·ÂÇØ º¸ÀÚ. telnet¿¡ ÀÌ ¼­ºê ·¿À» È£ÃâÇØ º¸¸é(ÀÚ) ´ÙÀ½°ú °°ÀºHTTPÀÀ´ä ÆÐŶÀ» °üÂûÇÒ ¼ö°¡ ÀÖ½À´Ï´Ù.

HTTP/1.1 200 OK

Content-Type: text/html; charset=Shift_JIS

Connection: close

Date: Tue, 22 Oct 2002 04:39:25 GMT

Server: Apache Tomcat/4.0.4-b3 (HTTP/1.1 Connector)

Set-Cookie: HelloCookie=Hello AAA;B%BB;Expires=Tue, 22-Oct-2002 04:44:26 GMT

ÀÌÇÏ »ý·«

ÀÌ°ÍÀ» ºê¶ó¿ìÀú(IE6)Àº ¾î¶»°Ô ¼öÁß¿¡ ³Ö¾ú´ÂÁö¸¦Explorer¿¡ º¸¸é(ÀÚ)C:\WINDOWS\CookiesÀÇ µð·ºÅ丮¿¡ ±â·ÏµÇ°í ÀÖ´Â ÆÄÀÏÀº ´ÙÀ½°ú °°Àº ÅؽºÆ®°¡ µÇ¾î ÀÖ½À´Ï´Ù. Áï ½ºÆäÀ̽º´Â ¹Þ¾Æµé¿´Áö¸¸ ¼¼¹ÌÄÝ·Ð ÀÌÈÄ´Â ÄíÅ°·Î¼­´Â ¹Þ¾ÆµéÀÌÁö´Â ¾Ê½À´Ï´Ù. ¼¼¹ÌÄÝ·ÐÀº ÀÎÅͳÝÀÇ ¼¼°è¿¡¼­´Â ¡¸´Ü¶ô ¹®ÀÚ¡¹ÀÎ °ÍÀÔ´Ï´Ù.

HelloCookie

AAA

localhost/examples/servlet/

1024

1088345728

29522332

2383813024

29522331

*

 

´ÙÀ½ÀÇ ÀåÀ¸·Î ÀÚ¼¼ÇÏ°Ô ¼³¸íÇÕ´Ï´Ù¸¸ ,URLÀÎÄÚµùÀºMSBÀÌ1ÀÇ ¾Æ¸£¹ÙÀÌÆ®³ª , ÀÎÅͳݻ󿡼­ Ưº°ÇÑ Àǹ̸¦ °¡Áö´Â7ºñÆ®ASCII¹®ÀÚ¸¦ ,7ºñÆ®ASCII¹®ÀÚ¸¦ »ç¿ëÇØ È¥¶õ½ÃÅ°Áö ¾Ê°í º¸³»±â À§ÇÑ ±¸Á¶ÀÎ °ÍÀÔ´Ï´Ù.

 

Áö±Ý±îÁöÀÇ ½ÇÇèÀ¸·ÎºÎÅÍ ºÐ µ¡¾ø´Â ¼¼»ó °Ô ,ÄíÅ°ÀÇ ¼Û½Å¿¡ ÇØ´çÇØ À̸§ , °ª°úµµURLencode ÇØ º¸³»´Â °ÍÀÌ Ãßõ µË´Ï´Ù. ÀÌ°ÍÀºNetScape»çÀÇ Çؼ³¼­¿¡¼­µµ Ãßõ µÇ°í ÀÖ´Â °ÍÀÔ´Ï´Ù. ¶ÇÇÑ ¼­ºê ·¿·¿£ÁøÀÌ ¼¼¼Ç À¯Áö¸¦ À§ÇØcookieÀ» ¼¼Æ® ÇÒ ¶§´ÂURLencode ÇÏ°í ÀÖÁö´Â ¾ÊÀº , À̶ó°í ÇÒ±îURLencodeÀÇ ÇÊ¿ä°¡ ¾ø´Â ¹®ÀÚ ¹Û¿¡ »ç¿ëÇÏ°í ÀÖÁö ¾Ê½À´Ï´Ù (URLº¯È¯Çصµ ¾î¶² º¯È­µµ »ý±âÁö ¾Ê½À´Ï´Ù ). telnetµîÀ¸·Î °Ë»çÇϱ⠽¬¿î (¾Æ¸£¹ÙÀÌÆ®ÀΠä¿¡¼­µµ ¡¸À̸§¡¹ÀÌ ±×´ë·Î ÀÐÀ» ¼ö ÀÖ´Ù ) µí ,¡¸À̸§¡¹ÀºURLencode¿¡ °É¸®Áö ¾Ê´Â ¿µ¼öÀÇ Ä³¸¯ÅÍ ¶óÀÎÀ¸·Î ÇÏ´Â °ÍÀÌ Æ®·¯ºí ¹æÁö°¡ µÇ°ÚÁö¿ä.

 

±×·±µ¥ , ´ÙÀ½°ú °°ÀÌ À̸§°ú °ª ½Ö¹æÀ»JavaÀÇURLEncoder¿¡ encode ÇØ ¸¸µç ÄíÅ°´Â ¾î¶»°Ô ºê¶ó¿ìÀú°¡ ó¸®ÇÒ±î Á¶»çÇØ º¾½Ã´Ù.

      String namestring = "³»°¢ÃѸ®´ë½Å";

      String valuestring = "ÄÚÀÌÁî¹Ì ÁëÀÌÄ¡·Î";

      namestring = URLEncoder.encode(namestring, "Shift_JIS");

      valuestring = URLEncoder.encode(valuestring, "Shift_JIS");

      cookie = new Cookie(namestring, valuestring);

±×·¸´Ù¸é ,c:\windows\cookiesÀÇ ÆÄÀÏÀ» Á¶»çÇØ º¸¸é ´ÙÀ½°ú °°ÀÌ ºê¶ó¿ìÀú´ÂURLencode µÈ ij¸¯ÅÍ ¶óÀÎÀ» ±×´ë·Î ¹Þ°í ÀÖÀ» »ÓÀ̶ó°í ¸»ÇÏ´Â °ÍÀ» ¾Ë ¼ö ÀÖ½À´Ï´Ù. ÀÌ°ÍÀ» ¹ÙÅÁÀ¸·Î µÇµ¹¸®´Â °ÍÀº ÇÁ·Î±×·¡¸ÓÀÇ Ã¥ÀÓÀ̶ó°í ÇÏ´Â °ÍÀÔ´Ï´Ù.

%93%E0%8A%74%91%8D%97%9D%91%E5%90%62

%8F%AC%90%F2%8F%83%88%EA%98%59

localhost/examples/servlet/

1024

3287822464

29522316

294622464

29522316

*

 

ÁïNetscapeÀÇ »ý°¢Àº ,¡¸ÄíÅ°´Â1¾Æ¸£¹ÙÀÌÆ® ¹®ÀÚ·Î , ÇÑÆí ¾ÈÀüÇÑ ¹®ÀÚ·Î ±¸¼ºµÈ ij¸¯ÅÍ ¶óÀÎÀÌ À̸§°ú °ªÀÇ Æä¾î·Î¼­ Á¸ÀçÇÏ°í ÀÖ´Â °ÍÀ» ÀüÁ¦·Î ÇÏ°í ÀÖ´Ù. ±×·¸Áö ¾ÊÀº ij¸¯ÅÍ ¶óÀÎÀ» ±×·¯ÇÑ Á¦¾à¿¡ µû¶ó º¯È¯ÇØ »ç¿ëÇÏ´Â °ÍÀº ÇÁ·Î±×·¡¸ÓÀÇ Ã¥ÀÓÀÌ´Ù¡¹À̶ó´Â °ÍÀÌÁö¿ä.

 

¼±µÎ·Î µ¹¾Æ¿À´Â


 

 

2.        URLÀÎÄÚµù°ú´Â

 

¾î¶°ÇÑ ¾Æ¸£¹ÙÀÌÆ®¿­¿¡¼­µµ7ºñÆ®¸¸ÀÇASCII¹®ÀÚ¸¦ »ç¿ëÇØ ÀÎÅͳÝÀÇ ±×¹°À» Åë°ú½ÃÅ°±â À§ÇÑ ±¸Á¶·Î¼­ÀÇURLÀÎÄÚµù , ȤÀº ±× ¿ªÀÇURLµðÄÚµù¿¡ ´ëÇØ Á» ´õ »ó¼¼ÇÏ°Ô ÀÌÇØÇϱâ·Î ÇÏ°Ú½À´Ï´Ù.

 

¸ÞÀÏ(SMTP)À̳ªHTTPµîÀÇ ÆÐŶÀº , Çì´õºÎ¿¡ Ç༱Áö³ª ±× ¿Ü ¸Þ¼¼ÁöÀÇ Á¦¾î¿¡ °ü·ÃµÇ´Â Á¤º¸°¡ ½Ç¸³´Ï´Ù. ÀÌ Çì´õ´Â µµÁß ÀÇ (Çì´õ°¡ Çؼ®µÈ´Ù ) °ÔÀÌÆ® ¿þÀ̸¦ ¸îÀ̳ª Áß°èµÇ¾î ±¸¼®¿¡¼­ ±¸¼®ÀÇ ³ëµå¿¡ Àü´ÞµÇ¹Ç·Î , ÀÌ·¯ÇÑ ³ëµå¿¡ ÀÌÇØÇÒ ¼ö ÀÖ´Â ÄÚµå¿Í ¹®ÀڷΠǥÇöµÇÁö ¾ÊÀ¸¸é ¾ÈµË´Ï´Ù. Çì´õºÎ¿¡ ÀϺ»¾î¿Í °°Àº2¾Æ¸£¹ÙÀÌÆ®ÀÇ ¹®ÀÚ°¡ µé¾î°¡¸é(ÀÚ) , ³ëµå´Â ÀÌ°ÍÀ»1¾Æ¸£¹ÙÀÌÆ®¾¿ Çؼ®ÇÏ·Á°í ÇÕ´Ï´Ù. ±× ¶§¿¡ ±× ¾Æ¸£¹ÙÀÌÆ®ÀÇ ¾î¶² °ÍÀΰ¡°¡ ³ëµå¿¡ ÀÖ¾î Ưº°ÇÑ Àǹ̸¦ °¡Áö´Â ¾Æ¸£¹ÙÀÌÆ®À̸é(ÀÚ) , ¿Ã¹Ù¸¥ °á°ú ¸¦ ¾òÀ» ¼ö ¾ø°Ô µÇ¾î ¹ö¸³´Ï´Ù. ´õ¿í ³×Æ®¿öÅ©¿¡ µû¶ó¼­´Â °¢ ¾Æ¸£¹ÙÀÌÆ®ÀÇ ¸Ç À§ÀÇ ºñÆ®(MSB)À» °áÇÌ ½ÃÅ°´Â Àü¼Û ³ëµå°¡ Á¸ÀçÇÕ´Ï´Ù. µû¶ó¼­ ¾î¶°ÇÑ ¹®ÀÚ¿©µµ ±×·¯ÇÑ Á¦¾à ¼Ó¿¡¼­ ¾ÈÀüÇÏ°Ô ÇÑÆí Åõ°úÀûÀ¸·Î Àü¼ÛµÇ´Â °ÍÀÌ ÇÊ¿äÇÏ°Ô µË´Ï´Ù. ±¸Ã¼ÀûÀ¸·Î´Â7ºñÆ®·Î ÇÑÆí ¡¸¾ÈÀüÇÑ¡¹ASCII(American Standard Code for Information Interchange)ij¸¯ÅÍ ¼¼Æ®·ÎºÎÅÍ µÇ´Â ij¸¯ÅÍ ¶óÀÎÀ¸·Î º¯È¯ÇØ ÀÎÅͳÝÀ» ÅëÇÑ´Ù°í ÇÏ´Â °ÍÀÔ´Ï´Ù. ±×·¯ÇÑ ±¸Á¶·Î¼­URLencode°¡ »ý°¢µÇ¾ú½À´Ï´Ù. URLencode¶ó°í ÇÏ´Â °ÍÀº , ¿ø·¡ Çì´õºÎÀÇURLºÎºÐ¿¡2¾Æ¸£¹ÙÀÌÆ® ¹®ÀÚ³ª Á¦¾î ¹®ÀÚ¿Í È¥µ¿Çϱ⠽¬¿î ¹®ÀÚ°¡ µé¾î°¡´Â °ÍÀ» ¹æÁöÇϱâ À§Çؼ­ »ý°¢µÇ¾ú±â ¶§¹®¿¡ ±×·¸°Ô ºÒ¸®°í ÀÖ½À´Ï´Ù. ±×·¯³ª º¸³»Áö´Â Á¤º¸¸¦ ¸ðµÎ ¡¸º¸Àδ١¹Ä³¸¯ÅÍ ¶óÀÎÀ¸·Î º¯È¯ÇÏ´Â °ÍÀº ÇüÆíÀÌ ÁÁÀº ÀÏÀÌ ¸¹¾Æ , ¸Þ¼¼ÁöÀÇ º¸µð ºÎºÐÀÇ Àü´Þ¿¡µµ »ç¿ëµË´Ï´Ù. º¸µð ºÎºÐÀÇ º¯È¯¿¡´Â ¶Ç ÇϳªMIME(Multi-Purpose Internet Mail Extensions)ÀÇ ÀÎÄÚµùÀÌ ÀÖ½À´Ï´Ù. ÀÌ°ÍÀº2¾Æ¸£¹ÙÀÌÆ®ÀÇ ¹ÙÀ̳ʸ®·µ¥ÀÌÅ͸¦3¾Æ¸£¹ÙÀÌÆ®ÀÇ7ºñÆ®ASCII¹®ÀÚ·Î º¯È¯ÇÏ´Â °ÍÀ¸·Î , ¸ÖƼ¹Ìµð¾î Á¤º¸ÀÇ Àü¼Û¿¡ »ç¿ëµË´Ï´Ù.

 

URLencodeÀÇ ¼ø¼­´Â ÀÌÇÏ °°½À´Ï´Ù.

 

¨ç       ÀϺ»¾î¿Í °°ÀÌ2¾Æ¸£¹ÙÀÌÆ®ÀÇ ¹®ÀÚ´Â1¾Æ¸£¹ÙÀÌÆ®¸¶´Ù ²¨³»ASCII¹®ÀÚ·Î °£ÁÖÇØ ÀÌÇÏÀÇ º¯È¯À» ½Ç½ÃÇÑ´Ù.

¨è       À̸§°ú °ª¿¡ ÀÖ´Â ¡¸¾ÈÀüÇÏÁö ¾Ê´Ù¡¹¹®ÀÚ´Â"%xx"À̶ó°í ÇÏ´Â À̽ºÄÉÀÌÇÁ ij¸¯ÅÍ ¶óÀÎÀ¸·Î º¯È¯ÇÑ´Ù. "xx"Àº ±× ¹®ÀÚÀÇASCIIÄ¡¸¦16Áø Ç¥½ÃÇÑ °ÍÀÌ´Ù. ¡¸¾ÈÀüÇÏÁö ¾Ê´Ù¡¹¹®ÀÚ¿¡´Â=, &, %, +À̳ª ÇÁ¸°Æ® ÇÒ ¼ö ¾ø´Â ¹®ÀÚ,MSB(ÃÖ»óÁ¤µµ ºñÆ®) (ÀÌ)°¡1ÀÇ ¹®ÀÚ¸¦ Æ÷ÇÔÇÑ´Ù.

¨é       ¸ðµçASCIIÀÇ ½ºÆäÀ̽º ¹®ÀÚ¸¦+À¸·Î º¯È¯ÇÑ´Ù.

¨ê       À̸§°ú °ªÀ»=°ú&¿¡ À̾î ÇϳªÀÇ Ä³¸¯ÅÍ ¶óÀÎÀ¸·Î ÇÑ´Ù. ¿¹¸¦ µé¸éname1=value1&name2=value2&name3=value3

 

ÀÌ Ä³¸¯ÅÍ ¶óÀÎÀÌPOST¿ä±¸ ¸Þ¼¼ÁöÀÇ º¸µð ºÎºÐ , ȤÀºGET¿ä±¸ÀÇ Äí¿¡¸® ij¸¯ÅÍ ¶óÀÎ , ȤÀº ÄíÅ°ÀÇ Çì´õÇàÀ¸·Î¼­´Â ° ºÕºñ¾îÁý´Ï´Ù.

 

¼±µÎ·Î µ¹¾Æ¿À´Â

 


 

 

3.        JavaScript¿¡ À־ÀÇescape()°úunescape()ÇÔ¼ö

 

µåµð¾î Ŭ¶óÀ̾ðÆ®(ºê¶ó¿ìÀú) ÂÊ ¿¡ À̾߱⸦ ¿Å±é½Ã´Ù. JavaScriptÀ¸·Î´Â ´çÃÊ´Âescape()°úunescape()ÀÇ ±Û·Î¹ú ÇÔ¼ö°¡ ±×·¯ÇÑ ¸ñÀûÀ¸·Î »ç¿ëµÇ´Â ÀÏÀÌ ÀÖ¾ú½À´Ï´Ù. ±×·¯³ª ÀÌ·¯ÇÑ ÇÔ¼ö´Â ¿ÏÀüÇÑURLencode ´ëÀÀÀÌ ¾Æ´Ñ µ¥´Ù°¡ , ±× ÇÔ¼öÀÇ Á¤ÀÇ°¡ µµÁß¿¡ ¹Ù²î¾î ¹ö·Á , ÃßõÇÒ ¼ö ¾ø½À´Ï´Ù.

 

±×·¸´Ù¸éJavaScript¿¡ ÄíÅ°¸¦ Àо ¶§ ,URLencode µÈ ÄíÅ°¸¦ ¾î´À ij¸¯ÅÍ ¼¼Æ®¶ó°í ÀÌÇØÇØ µðÄÚµåÇÏ´Â °ÍÀϱî¿ä? Java¿¡ À־URLEncoder°úURLDecoderÀÇ µÎ °³ÀÇ Å¬·¡½º¿¡ ÀÖ¾î ij¸¯ÅÍ ¼¼Æ®(°Ô´Ù°¡W3CÀÌ ±Ç°íÇÏ°í ÀÖ´Ù°í ÇصµUTF-8À» Ãßõ!) ¸¦ ÁöÁ¤ÇÏ°Ô µÇ¾ú´ø °ÍÀÌ ÃÖ±ÙÀÇ ÀÏ (j2sdk1.4ºÎÅÍ ) ÀÎ °ÍÀÔ´Ï´Ù.

 

JavaScriptÀÇ ¾ð¾î »ç¾ç(escape/unescape)¿¡´Â ±×·¯ÇÑ ±â´ÉÀÌ Á¸ÀçÇÏÁö ¾Ê´Â °ÍÀÌ È¥¶õÀÇ Åä´ë°¡ µÇ°í ÀÖ´Â °Í °°½À´Ï´Ù. ¿¹¸¦ µé¸éescape()¸Þ¼Òµå´ÂNN(Netscape Navigator)ÀºShift_JISÀÇ Äڵ带URLencode³ª¹«·Î ,IE(Internet Explorer)Àº Unicode Ç¥±â(À̽ºÄÉÀÌÇÁ·¼ø¼­À̸çUTFÀº ¾Æ´Ï´Ù! ) (À»)¸¦ µ¹·ÁÁÖ¾î ¹ö¸³´Ï´Ù. ¿ªÁ¶ÀÛÀÇescape()¸Þ¼Òµåµµ ÀÌ°Í¿¡ ´ëÀÀÇÕ´Ï´Ù. ±×·±µ¥ ¹®Á¦¸¦ ´õ¿í º¹ÀâÇÏ°Ô ÇÏ°í ÀÖ´Â °ÍÀÌ ,IEÀÇescape()ÇÔ¼ö´Â Åë»óÀÇUTF-16ÀÇURLencode(¿¹¸¦ µé¸éj2sdk1.4ÀÇURLEncoder.encode(str, ¡°UTF-16¡±);) ¿Í´Â ¿ÏÀüÈ÷ ´Ù¸¥ ´Ü¼øÇÑ Unicode Ç¥±âÀÇ Ä³¸¯ÅÍ ¶óÀÎÀ» ¸¸µé¾î ³½´Ù , ¶ó°í ÇÏ´Â °ÍÀÔ´Ï´Ù. ¿¹¸¦ µé¸é ´ÙÀ½°ú °°ÀºhtmÆÄÀÏÀ»IE¿¡ ¿­¸®¸é(ÀÚ) ,

<HTML>

<HEAD>

<TITLE>JavaScript escape()/unescape() functionarity test</TITLE>

<META HTTP-EQUIV="content-type" CONTENT="text/html; charset=SHIFT_JIS">

</TITLE>

<BODY>

<PRE>

JavaScript¿¡ À־ÀÇescapeÇÔ¼öÀÇ ºê¶ó¿ìÀú¿¡ ÀÇÇÑ »óÀ§¸¦ üũÇÏ´Â

<SCRIPT LANGUAGE="JavaScript">

  s="³»°¢ÃѸ®´ë½Å=ÄÚÀÌÁî¹Ì ÁëÀÌÄ¡·Î";

  document.writeln("original string  : "+s);

  s=escape(s);

  document.writeln("escaped string   : "+s);

  s=unescape(s);

  document.writeln("unescaped string : "+s);

</SCRIPT>

</PRE>

</BODY>

</HTML>

´ÙÀ½°ú °°Àº È­¸éÀÌ Ç¥½ÃµË´Ï´Ù.

JavaScript¿¡ À־ÀÇescapeÇÔ¼öÀÇ ºê¶ó¿ìÀú¿¡ ÀÇÇÑ »óÀ§¸¦ üũÇÏ´Â

original string  : ³»°¢ÃѸ®´ë½Å=ÄÚÀÌÁî¹Ì ÁëÀÌÄ¡·Î

escaped string   : %u5185%u95A3%u7DCF%u7406%u5927%u81E3%3D%u5C0F%u6CC9%u7D14%u4E00%u90CE

unescaped string : ³»°¢ÃѸ®´ë½Å=ÄÚÀÌÁî¹Ì ÁëÀÌÄ¡·Î

Áï%u¥¥¥¥µÇ´Â UnicodeÀÇ16Áø Ç¥±â¸¦ µ¹·ÁÁÖ°í ÀÖ´Â °ÍÀÌ ºÐ ºô¸®°íÁö¿ä.

 

´ÙÀ½°ú °°ÀÌ ,IEÀÌunescape()ÇÔ¼ö¸¦ »ç¿ëÇØ Àо ¼ö ¾øÀ»±îURLEncoder.encode()¸Þ¼Òµå¸¦ »ç¿ëÇØ ¼­¹öÃø¿¡¼­ ,cookieÀ» ¼¼Æ® Çß´Ù°í ÇսôÙ.

import java.io.*;

import java.net.*;

import javax.servlet.*;

import javax.servlet.http.*;

/** ÄíÅ° ÀÐ°í ¾²±â ¼­ºê ·¿ **/

public class HelloCookie extends HttpServlet {

  public void doGet (HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {

    PrintWriter out;

    Cookie[] cookies;

    Cookie cookie;

    String urlencoding = "UTF-16"; //ÇÊ¿äÇÏ°Ô ÀÀÇÏ°í"Shift_JIS"À̳ª¡±UTF-8¡±µî À» ½ÃÇèÇÏ´Â

    // CookieÀÇ Ãëµæ

    cookies = req.getCookies();

    cookie = null;

    if (cookies != null){

      for(int i=0; i < cookies.length; i++) {

        cookie = cookies[i];

        if (cookie.getName().equals("HelloCookie")) { break; }

      }

    }

    res.setContentType("text/html; charset=Shift_JIS");

    out = res.getWriter();

    if (cookie == null) {      // CookieÀÇ ±â·Ï

      String namestring = "³»°¢ÃѸ®´ë½Å";

      String valuestring = "ÄÚÀÌÁî¹Ì ÁëÀÌÄ¡·Î";

      namestring = URLEncoder.encode(namestring, urlencoding);

      valuestring = URLEncoder.encode(valuestring, urlencoding);

      cookie = new Cookie(namestring, valuestring);

      cookie.setMaxAge(300);   // À¯È¿±â°£Àº5ºÐ ¿¡ ²÷¾îÁö´Â

      res.addCookie(cookie);

      out.println("<html><body>");

      out.println("<h1>Write Cookie</h1>");

      out.println("<P>");

      out.println("<SCRIPT LANGUAGE=\"JavaScript\">");

      out.println("s=unescape(document.cookie);");

      out.println("document.write(\"unescaped cookie : \"+s);");

      out.println("</SCRIPT>");

      out.println("</P>");

      out.println("<p>¸®·Îµå ÇØ ÁÖ¼¼¿ä. </p>");

      out.println("</body></html>");

    } else {      // CookieÀÇ Ç¥½Ã

      out.println("<html><body>");

      out.println("<h1>");

      out.println(URLDecoder.decode(cookie.getValue(), urlencoding));

      out.println("</h1>");

      out.println("<p>CookieÀÇ »ùÇÃ(HelloCookie.java)</p>");

      out.println("</body></html>");

    }

  }

}

ÀÌ ¶§telnet¿¡ ¾×¼¼½º ÇØTomcatÀÌ ¼Û½ÅÇÏ´ÂHTTPÀÀ´ä ÆÐŶÀÇSet-CookieÇàÀ» Á¶»çÇϸé(ÀÚ) ´ÙÀ½°ú °°ÀÌ µÇ¾î ÀÖ½À´Ï´Ù.

Set-Cookie: %FE%FF%51%85%95%A3%7D%CF%74%06%59%27%81%E3=%FE%FF%5C%0F%6C%C9%7D

%14%4E%00%90%CE;Expires=Wed, 23-Oct-2002 04:33:23 GMT

Áï ¡¸³»°¢ÃѸ®´ë½Å¡¹ÀÇ Ä³¸¯ÅÍ ¶óÀÎÀº%FE%FF%51%85%95%A3%7D%CF%74%06%59%27%81%E3¿¡ , ¡¸ÄÚÀÌÁî¹Ì ÁëÀÌÄ¡·Î¡¹ÀÇ Ä³¸¯ÅÍ ¶óÀÎÀº%FE%FF%5C%0F%6C%C9%7D%14%4E%00%90%CE¿¡ º¯È¯µÇ°í ÀÖ½À´Ï´Ù. FEFFµÇ´Â ij¸¯ÅÍ ¶óÀÎÀº ÀÌ°ÍÀÌBOM(¾Æ¸£¹ÙÀÌÆ®¼ø¼­ ¸¶Å©) À¸·Î , ºò endianÀÎ °ÍÀ» ÀǹÌÇÕ´Ï´Ù. ÀÌ°ÍÀÌ Á¤½ÄÀÇUTF-16ÄÚµå Ç¥½ÃÀÎ °ÍÀÔ´Ï´Ù. ¡¸³»°¢ÃѸ®´ë½Å=ÄÚÀÌÁî¹Ì ÁëÀÌÄ¡·Î¡¹¶ó°í Çϴ ij¸¯ÅÍ ¶óÀÎÀÇ °æ¿ì´Â ´ÙÀ½°ú °°ÀÌ º¯È¯µË´Ï´Ù.

%FE%FF%51%85%95%A3%7D%CF%74%06%59%27%81%E3%00%3D%5C%0F%6C%C9%7D%14%4E%00%90%CE

´ç¿¬ÇÑ ÀÏÀ̸鼭 ÀÌ ¼­ºê ·¿ÀÇ Ãâ·ÂÀ»IEÀÇ unescape()ÇÔ¼ö´Â ¿Ã¹Ù¸£°Ô ¹Þ¾Æµé¿© ÁÖÁö ¾Ê½À´Ï´Ù.

 

IEÀÌ ¸¸µé¾î ³»´Â ¡¸³»°¢ÃѸ®´ë½Å=ÄÚÀÌÁî¹Ì ÁëÀÌÄ¡·Î¡¹ÀÇ ÀÎÄÚµùÀº Á¶±Ý Àü °¡¸®Å² °Íó·³ ´Ü¼øÇÑ Unicode Ç¥±âÀÇ

%u5185%u95A3%u7DCF%u7406%u5927%u81E3%3D%u5C0F%u6CC9%u7D14%u4E00%u90CE

À̸ç , ÀÌ°Í°ú´Â ¿ÏÀüÈ÷ Â÷ÀÌ°¡ ³³´Ï´Ù. °Ô´Ù°¡¡±=¡±À̶ó°í ÇÏ´Â ¹®ÀÚ´Â Unicode Ç¥½ÃµÇÁö ¸»°í ´Ü¼øÇÑ%3DÀ̶ó°í ÇÏ´ÂASCII¹®Àڷμ­ ó¸®µÇ¾î ¹ö¸®°í ÀÖ½À´Ï´Ù. ¾î°¼­%u003DÀ¸·Î ÇÏÁö ¾Ê´Â °ÍÀϱî¿ä. ECMA-262¿¡ ÁØ°ÅÇßÁö¸¸µíÀÔ´Ï´Ù¸¸ , °ï¶õÇÑ °ÍÀÔ´Ï´Ù. µû¶ó¼­ ¡¸IEÀÇ °æ¿ì´Â ¼ö»óÇÑescape()°úunescape()ÇÔ¼ö´Â »ç¿ëÇÏÁö ¾Ê´Â ÆíÀÌ ÁÁ´Ù¡¹¶ó°í ÇÏ´Â °ÍÀÌ °á·ÐÀÔ´Ï´Ù.

 

µ¡ºÙ¿©¼­ ¹æ±ÝÀüÀÇ ¼­ºê ·¿À¸·Î String urlencoding = "Shift_JIS";À̶ó°í º¯°æÇØ , ÀÌ°ÍÀ»NN¿¡ È£ÃâÇϸé(ÀÚ) ´ÙÀ½°ú °°ÀÌ Á¤»óÀûÀ¸·Î Ç¥½ÃµË´Ï´Ù.


´ÜNNÀ¸·Î´ÂShift_JISÀÇURLencode¸¦ »ç¿ëÇÏ°í ÀÖÀ¸¸é ¹®Á¦°¡ ¾ø´Â°¡ Çϸé À¯°¨½º·´Áö¸¸ ±×·¸Áö´Â ¾Ê½À´Ï´Ù. ¿¹¸¦ µé¸é ¡¸³»°¢ÃѸ®´ë½Å ÄÚÀÌÁî¹Ì ÁëÀÌÄ¡·Î¡¹¶ó°í »çÀÌ¿¡ ¹Ý°¢ ½ºÆäÀ̽º ¹®ÀÚ°¡ µé¾î°¡ ÀÖÀ¸¸é(ÀÚ)NNÀº ¡¸³»°¢ÃѸ®´ë½Å+ÄÚÀÌÁî¹Ì ÁëÀÌÄ¡·Î¡¹¶ó°í Ç÷¯½º ±âÈ£·Î ¹Ù²Ù¾î ÀÖ½À´Ï´Ù. ÀÌ°ÍÀºURLencodeÀÇ Çؼ®ÀÇ »óÀ§¿¡ ÀÇÇÏ´Â °ÍÀ¸·Î ,j2sdk1.4À¸·Î´Â ½ºÆäÀ̽º´Â¡±+¡±¹®ÀÚ·Î º¯È¯Çϴµ¥ ,NNÀÇescape()ÇÔ¼öÀÇ °æ¿ì´Â ½ºÆäÀ̽º¸¦%20À¸·Î º¯È¯ÇÕ´Ï´Ù. ¼¼¼¼ÇÑ ÀÏÀÔ´Ï´Ù¸¸j2sdk1.4À¸·Î´Â ÃÑÀ̶ó°í ÅëÀÏÇØ%nnÀÇ Çü½Ä¿¡¼­ º¯È¯Çϴµ¥NNÀÇescape()ÇÔ¼öÀÇ °æ¿ì´Â ¾Æ¸£¹ÙÀÌÆ®·Î °íÃÆÀ» ¶§¿¡ À§ÇèÇÑ ¹®ÀÚ°¡ ¾Æ´Ï¸é ±×´ë·Î1¾Æ¸£¹ÙÀÌÆ® ¹®Àڷμ­ º¯È¯ÇÕ´Ï´Ù. ±¸Ã¼ÀûÀ¸·Î"³»°¢ÃѸ®´ë½Å ÄÚÀÌÁî¹Ì ÁëÀÌÄ¡·Î"µÇ´Â ij¸¯ÅÍ ¶óÀÎÀÇ º¯È¯ÀÇ »óÀ§¸¦ ³ªÅ¸³»¸é(ÀÚ)£º

J2sdk1.4ÀÇURLEncoder.encode()

%93%E0%8A%74%91%8D%97%9D%91%E5%90%62

+%8F%AC%90%F2%8F%83%88%EA%98%59

NNÀÇJavaScriptÀÇescape()

%93%E0%8At%91%8D%97%9D%91%E5%90b

%20%8F%AC%90%F2%8F%83%88%EA%98Y

ÀÌ µÇ°í ÀÖ½À´Ï´Ù. ÀÌ »óÀ§´Â ½Ö¹æ¿¡¼­ Èí¼öµË´Ï´Ù¸¸ , À¯°¨½º·´Áö¸¸NNÀÇunescape()ÇÔ¼ö´Â Ç÷¯½º ¹®ÀÚ¸¦ ½ºÆäÀ̽º¿¡ µÇµ¹¸®Áö ¾Ê±â ¶§¹®¿¡ °á±¹ ȣȯ¼ºÀ» ÃëÇÒ ¼ö ¾ø°Ô µË´Ï´Ù.

 

ÀÌ»ó·ÎºÎÅÍJavaScriptÀÇescape()°úunescape()ÀºIE°úNN½Ö¹æÀ¸·Î ¹®Á¦°¡ ÀÖ¾î ,Web¾îÇø®¿Í °°ÀÌ ¼­¹ö/IE/NNÇÔ²² ¹®Á¦ ¾ø°í Á¤º¸ ±³È¯ Â ¼ö ÀÖÀ¸·Á°í ÇÏ´Â °÷ µîÀÇ ÇÔ¼ö´Â »ç¿ëÇØ¾ß ÇÏ´Â °ÍÀÌ ¾Æ´Ï´Ù , ¶ó°í °á·Ð µË´Ï´Ù.

 

¼±µÎ·Î µ¹¾Æ¿À´Â

 

 

 


 

4.        JavaScript¿¡ À־ÀÇencodeURI,decodeURI,encodeURIComponent,decodeURIComponent

 

ÀÌ·¯ÇÑ ¹®Á¦¸¦ ÇØ°áÇÏ·Á°í , »õ·Ó°í4°³ÀÇ ±Û·Î¹ú ÇÔ¼ö°¡ ÃÖ±Ù Á¤Àǵǰí ÀÖ½À´Ï´Ù. ÀÌ Àå¿¡¼­´Â ÀÌ·¯ÇÑ ÇÔ¼ö¸¦ Á¶»çÇÏ°í´Â ÀÖ½À´Ï´Ù¸¸ , ÃÖ±ÙÀÇ ¹öÁ¯ÀÇ ºê¶ó¿ìÀú ¹Û¿¡ ½ÇÀåµÇ¾î ÀÖÁö ¾ÊÀº °Í ,JavaÀÇURLÀÎÄÚµù°úÀÇ ¿ÏÀüÇÑ È£È¯¼ºÀÌ ¾ø´Â °ÍÀ¸·ÎºÎÅÍ , ¿ª½Ã ÃßõÀºÇϱ⠾î·Æ½À´Ï´Ù.

 

ÃÖ±ÙencodeURI,decodeURI,encodeURIComponent,decodeURIComponentÀÇ4°³ÀÇ ÇÔ¼ö°¡ECMA-262 3rd EditionÀ¸·Î ¼³Á¤µÇ¾ú½À´Ï´Ù. ½ÇÀåÀºJavaScript 1.5, NES 6.0ºÎÅ͵ǰí ÀÖ½À´Ï´Ù.http://developer.netscape.com/docs/manuals/js/core/jsref15/toplev.html#1118346¿¡ ±×·¯ÇÑ ÇÔ¼öÀÇ Á¤ÀÇ°¡ ÀÌ·ç¾îÁö°í ÀÖ½À´Ï´Ù. °Å±â¿¡ µû¸£¸é ÀÌ·¯ÇÑ ÇÔ¼ö´ÂUTF-8¿¡ º¯È¯ÇÏ°í ÀÖ½À´Ï´Ù. ´Ù¸¸ ÀÌ Ç¥¿Í °°ÀÌIE5À̳ªNN4À¸·Î´Â ÀÌ·¯ÇÑ ÇÔ¼ö°¡ ½ÇÀåµÇ¾î ÀÖÁö ¾Ê±â ¶§¹®¿¡ »ç¿ëÇÒ ¼ö ¾ø½À´Ï´Ù. NN4À̳ªIE5À» »ç¿ëÇÏ°í ÀÖ´Â »ç¶÷Àº ¾ÆÁ÷µµ »ó´ç Á¸ÀçÇÏ°í ÀÖ´Â °ÍÀÌ Çö»óÀ̸ç , ÀÌ·¯ÇÑ ÇÔ¼ö¸¦ »ç¿ëÇϴµ¥´Â ¹®Á¦°¡ ÀÖ½À´Ï´Ù.

¹öÁ¯

´ëÇ¥ÀûÀÎ ºê¶ó¿ìÀú

ºñ°í

1.0

NN2.0 ÀÇ µµÁß ~

IE3.0

JavaScript ÀÇ ¿À¸®Áö³¯ÀÇ »ç¾ç

1.1

NN3

IE3.02+JScript1.3ÆÐÄ¡

Array objectÀ̳ª À̺¥Æ®µîÀÇ Ãß°¡

1.2

NN4.0 ~ 4.05

IE4

Layer/DIV ±â´É, CSSÀÇ Ãß°¡

1.3

NN4.06 ~

IE5.0 ~

unicodeµî ÁÖ·Î ECMA-262´ëÀÀ

1.4

NN5( °³¹ß ÁßÁö )

catch/try µî ÀÇ ¿¹¿Ü ó¸® µî( ECMA-262´ëÀÀ )

1.5

Mozilla5( NN6 )

IE6~

ECMA-262 3rd Edition

2.0

?

ECMA-262 4th Edition

 

¾î·µç ¸ÕÀú ÀÌ·¯ÇÑ ÇÔ¼ö¸¦ Á¶»çÇØ º¾½Ã´Ù. ´ÙÀ½ÀÇ µÎ °³ÀÇ °Ñ(Ç¥)´ÂIE6°úNN7¿¡ ¾î¶°ÇÑURLº¯È¯ÀÌ µÇ´ÂÁö ½ÇÇèÇÑ °ÍÀÔ´Ï´Ù.

encodeURI

¿øÀÇ Ä³¸¯ÅÍ ¶óÀÎ

IE6ÀÇ Ãâ·Â

NN7ÀÇ Ãâ·Â

³»°¢ÃѸ®´ë½Å ÄÚÀÌÁî¹Ì ÁëÀÌÄ¡·Î

%E5%86%85%E9%96%A3%E7%B7

%8F%E7%90%86%E5%A4%A7%E8%87%A3

%20%E5%B0%8F%E6%B3%89%E7

%B4%94%E4%B8%80%E9%83%8E

%E5%86%85%E9%96%A3%E7%B7

%8F%E7%90%86%E5%A4%A7%E8%87%A3

%20%E5%B0%8F%E6%B3%89%E7

%B4%94%E4%B8%80%E9%83%8E

³»°¢ÃѸ®´ë½ÅXÄÚÀÌÁî¹Ì ÁëÀÌÄ¡·Î

%E5%86%85%E9%96%A3%E7%B7

%8F%E7%90%86%E5%A4%A7%E8%87%A3

X%E5%B0%8F%E6%B3%89%E7

%B4%94%E4%B8%80%E9%83%8E

%E5%86%85%E9%96%A3%E7%B7

%8F%E7%90%86%E5%A4%A7%E8%87%A3

X%E5%B0%8F%E6%B3%89%E7

%B4%94%E4%B8%80%E9%83%8E

 

encodeURIComponent

¿øÀÇ Ä³¸¯ÅÍ ¶óÀÎ

IE6ÀÇ Ãâ·Â

NN7ÀÇ Ãâ·Â

³»°¢ÃѸ®´ë½Å ÄÚÀÌÁî¹Ì ÁëÀÌÄ¡·Î

%E5%86%85%E9%96%A3%E7%B7

%8F%E7%90%86%E5%A4%A7%E8%87%A3

%20%E5%B0%8F%E6%B3%89%E7

%B4%94%E4%B8%80%E9%83%8E

%E5%86%85%E9%96%A3%E7%B7

%8F%E7%90%86%E5%A4%A7%E8%87%A3

%20%E5%B0%8F%E6%B3%89%E7

%B4%94%E4%B8%80%E9%83%8E

³»°¢ÃѸ®´ë½ÅXÄÚÀÌÁî¹Ì ÁëÀÌÄ¡·Î

%E5%86%85%E9%96%A3%E7%B7

%8F%E7%90%86%E5%A4%A7%E8%87%A3

X%E5%B0%8F%E6%B3%89%E7

%B4%94%E4%B8%80%E9%83%8E

%E5%86%85%E9%96%A3%E7%B7

%8F%E7%90%86%E5%A4%A7%E8%87%A3

X%E5%B0%8F%E6%B3%89%E7

%B4%94%E4%B8%80%E9%83%8E

 

Áö±ÝºÎÅÍ ¾Ëµµ·Ï(µíÀÌ)NN°úIEÀ¸·Î´Â ¿ÏÀüÈ÷ °°Àº °á°ú¸¦ ¾òÀ» ¼ö ÀÖ°í ÀÖ½À´Ï´Ù. ¾Ë°í¸®ÁòÀº °£´ÜÇØ1¾Æ¸£¹ÙÀÌÆ®ÀÇ ¹®ÀÚ´Â À§ÇèÇÑ ¹®ÀÚ(ÀÌ ¿¹¿¡¼­´Â¡± ¡±) ´Â%XXÇü½ÄÀ¸·Î º¯È¯ÇÏÁö¸¸ ±×·¸Áö ¾ÊÀ¸¸é (ÀÌ ¿¹¿¡¼­´Â¡±X¡±) ±× ¹®ÀÚ¸¦ ±×´ë·Î Ãâ·ÂÇÏ´Â °ÍÀÔ´Ï´Ù. ¸ðµÎ ½ºÆäÀ̽º´Â¡±+¡±ÀÌ ¾Æ´Ï¶ó¡±%20¡±°ú º¯È¯µË´Ï´Ù.

 

°÷¿¡¼­ Âü°í±îÁö ,URIÀ¸·Î¼­ÀÇ º¯È¯°úURIComponentÀ¸·Î¼­ÀÇ º¯È¯ÀÇ »óÀ§´Â ¹«¾ùÀԴϱî? »ç¾ç¿¡ ÀÇÇϸéURIÀ¸·Î¼­ º¯È¯ÇÏ´Â °æ¿ì´Â , ´ÙÀ½ÀÇ ¹®ÀÚ´Â º¯È¯ÇÏÁö ¾ÊÁö¸¸ ,URIComponentÀÇ °æ¿ì´Â reserved characterµµ º¯È¯ÀÇ ´ë»óÀÌ µÇ´Ù°í ÇÏ°í ÀÖ½À´Ï´Ù.

Ä«Å×°í¸®

¹®ÀÚ

reserved character

, / ? : @ & = + $ ,

À̽ºÄÉÀÌÇÁ ÇÏÁö ¾Ê´Â ¹®ÀÚ

¾ËÆĺª, 10Áø¼öÀÚ, - _ . ! ~ * ' ( )

½ºÄÚ¾Æ

#

µû¶ódocument.cookie¿¡ ²¨³½ ij¸¯ÅÍ ¶óÀÎÀ» ±×´ë·Î µÇµ¹¸± ¶§´ÂdecodeURI()À» »ç¿ëÇÏ°Ô µË´Ï´Ù. ÄíÅ°ÀÇ ¡¸°ª¡¹À̳ª ¡¸À̸§¡¹À» ó¸®ÇÒ ¶§´ÂdecodeURIComponent()µî À» »ç¿ëÇÏ´Ù°í ÇÏ°í ÀÖ½À´Ï´Ù. ÀÌ°ÍÀºJavaScriptÀÌ ÄíÅ°¸¦ (À̸§ , °ª) ÀÇ ¿ÀºêÁ§Æ®ÀÇ ÁýÇÕÀÌ ¾Æ´Ï°í , ´Ü¼øÇÑ Ä³¸¯ÅÍ ¶óÀÎÀ¸·Î¼­ ÃëÇØ ±Þ »ò±â ¶§¹®¿¡ »ý±ä ¹®Á¦ÀÔ´Ï´Ù. À̰͵µ ±×¸®°í ÇÁ·Î±×·¡¸Ó¿¡°Ô È¥¶õÀ» ÁÖ´Â ¿äÀÎÀÌ µË´Ï´Ù. ¸ÓÁö¾Ê¾Æ ±×ó·³ °³Á¤µÇ°Ô µÇ°ÚÁö¿ä.

 

µ¡ºÙ¿©¼­£º

¡¡¡± %E5%86%85%E9%96%A3%E7%B7%8F%E7%90%86%E5%A4%A7%E8%87%A3%20%E5%B0%8F%E6%B3%89%E7%B4%94%E4%B8%80%E9%83%8E¡±

µÇ´Â ij¸¯ÅÍ ¶óÀÎÀº ,decodeURI()µµdecodeURIComponent()µµ °°´Ù¡± ³»°¢ÃѸ®´ë½Å=ÄÚÀÌÁî¹Ì ÁëÀÌÄ¡·Î¡±À» µ¹·ÁÁÖ°Ú½À´Ï´Ù.

 

±×·¸Áö¸¸ , ȣȯ¼ºÀÇ ¹®Á¦°¡ ÀÖ½À´Ï´Ù. Áïj2sdk1.4ÀÇURLencoder.encode(String,¡±UTF-8¡±)ÀÌ À̽ºÄÉÀÌÇÁ Çϴ ij¸¯ÅÍ ¼¼Æ®¿ÍencodeURIÀÇ À̽ºÄÉÀÌÇÁ Çϴ ij¸¯ÅÍ ¼¼Æ®°¡ ´Ù¸¨´Ï´Ù. ´õ¿í ,j2sdk1.4¿¡URLencode ÇÑ Ä³¸¯ÅÍ ¶óÀÎÀÌdecodeURIÇÔ¼ö¿¡¼­´Â ¿Ã¹Ù¸£°Ô Àо ¼ö ¾ø°Ô µË´Ï´Ù.

 

encodeURIÇÔ¼ö°¡ À̽ºÄÉÀÌÇÁ ÇÏÁö ¾Ê´Â ¹®ÀÚ´Â ¾Æ·¡ Ç¥ °°¾Ò½À´Ï´Ù.

Ä«Å×°í¸®

¹®ÀÚ

reserved character

, / ? : @ & = + $ ,

À̽ºÄÉÀÌÇÁ ÇÏÁö ¾Ê´Â ¹®ÀÚ

¾ËÆĺª, 10Áø¼öÀÚ, - _ . ! ~ * ' ( )

½ºÄÚ¾Æ

#

EncodeURIComponentÇÔ¼ö ÂÊÀº À̽ºÄÉÀÌÇÁ ÇÏÁö ¾Ê´Â ij¸¯ÅÍ ¶óÀο¡´Â reserved character°¡ Æ÷ÇÔµÇÁö ¾Ê´Â °ÍÀÌ ´Ù¸¥ °÷(Áß)ÀÔ´Ï´Ù.

 

±×·¸Áö¸¸ ,j2sdk1.4ÀÇURLencoder.encode(String,¡±UTF-8¡±)ÀÌ À̽ºÄÉÀÌÇÁ ÇÏÁö ¾Ê´Â ¹®ÀÚ´Â ¾Æ·¡ Ç¥¿Í °°ÀÌ µÇ¾î ÀÖ½À´Ï´Ù. ÀûÀÚ ÇÑÆí ±â¿ï±â ¹®ÀÚÀÇ ºÎºÐÀÌ À̽ºÄÉÀÌÇÁ ÇÏÁö ¾Ê´Â ¹®ÀÚ , ´Ü ½ºÆäÀ̽º(SP)Àº¡±+¡±¿¡ ¿Å°Ü³õ°í ÇÑÆí ±×°ÍÀº À̽ºÄÉÀÌÇÁ ÇÏÁö ¾Ê´Â ¹®ÀÚÀÔ´Ï´Ù.

Char   Decimal    Hex           ¡¡¡¡Char  ¡¡  Decimal  ¡¡ Hex

                                                    

NUL       0        0                  SOH        1        1

STX       2        2                  ETX        3        3

EOT       4        4                  ENQ        5        5

ACK       6        6                  BEL        7        7

BS        8        8                   HT        9        9

NL       10        a                   VT       11        b

NP       12        c                   CR       13        d

SO       14        e                   SI       15        f

DLE      16       10                  DC1       17       11

DC2      18       12                  DC3       19       13

DC4      20       14                  NAK       21       15

SYN      22       16                  ETB       23       17

CAN      24       18                   EM       25       19

SUB      26       1a                  ESC       27       1b

FS       28       1c                   GS       29       1d

RS       30       1e                   US       31       1f

SP       32       20                    !       33       21

"        34       22                    #       35       23

$        36       24                    %       37       25

&        38       26                    '       39       27

(        40       28                    )       41       29

*        42       2a                    +       43       2b

,        44       2c                    -       45       2d

.        46       2e                    /       47       2f

0        48       30                    1       49       31

2        50       32                    3       51       33

4        52       34                    5       53       35

6        54       36                    7       55       37

8        56       38                    9       57       39

:        58       3a                    ;       59       3b

<        60       3c                    =       61       3d

>        62       3e                    ?       63       3f

@        64       40                    A       65       41

B        66       42                    C       67       43

D        68       44                    E       69       45

F        70       46                    G       71       47

H        72       48                    I       73       49

J        74       4a                    K       75       4b

L        76       4c                    M       77       4d

N        78       4e                    O       79       4f

P        80       50                    Q       81       51

R        82       52                    S       83       53

T        84       54                    U       85       55

V        86       56                    W       87       57

X        88       58                    Y       89       59

Z        90       5a                    [       91       5b

\        92       5c                    ]       93       5d

^        94       5e                    _       95       5f

`        96       60                    a       97       61

b        98       62                    c       99       63

d       100       64                    e       101      65

f       102       66                    g       103      67

h       104       68                    i       105      69

j       106       6a                    k       107      6b

l       108       6c                    m       109      6d

n       110       6e                    o       111      6f

p       112       70                    q       113      71

r       114       72                    s       115      73

t       116       74                    u       117      75

v       118       76                    w       119      77

x       120       78                    y       121      79

z       122       7a                    {       123      7b

|       124       7c                    }       125      7d

~       126       7e                  DEL       127      7f

 

µû¶ó¼­ ½ÇÇè ¼­ºê ·¿ÀÇ ÇÁ·Î±×·¥À¸·Î ,

      String namestring = "URLencodeÀÇ ½ÇÇè";

      String valuestring = " !\"#$%&'()*+"+'\u002c'+"-./01289:;<=>?@ABCXYZ[\\]"+'\u005e'+'\u005f'+'\u0060'+"abcxyz{|}"+'\u007e';

      namestring = URLEncoder.encode(namestring, urlencoding);

      valuestring = URLEncoder.encode(valuestring, urlencoding);

À¸·Î¼­£§\u0020£§ºÎÅÍ£§\u007e£§±îÁö ÀÇ ¹®ÀÚ°¡ ¾î¶»°ÔURLencode µÇ¾î ÇÑÆíJavaScriptÀÇdecodeURIÇÔ¼ö°¡ ¾î¶»°Ô µðÄÚµåÇұ ½ÃÇèÇØ º¸¸é ´ÙÀ½°ú °°Àº °á°ú¸¦ ¾òÀ» ¼ö ÀÖ½À´Ï´Ù.

undecoded cookie : URL%E3%82%A8%E3%83%B3%E3%82%B3%E3%83%BC%E3%83%89%E3%81%AE%E5%AE%9F%E9%A8%93

=+%21%22%23%24%25%26%27%28%29*%2B%2C-.%2F01289%3A%3B%3C%3D%3E%3F%40ABCXYZ%5B%5C%5D%5E_%60

abcxyz%7B%7C%7D%7E

decoded cookie : URLencodeÀÇ ½ÇÇè=+!"%23%24%%26'()*%2B%2C-.%2F01289%3A%3B<%3D>%3F%40ABCXYZ[\]^_`abcxyz{|}~

ÁïdecodeURIÇÔ¼ö´Â reserved character¿Í ½ºÄÚ¾Æ ¹®ÀÚ¿¡ÀÇ µðÄÚµå´Â ÇÏÁö ¾Ê°í , ±×´ë·Î À̽ºÄÉÀÌÇÁ Ç¥½Ã¸¦ µ¹·ÁÁÖ¾î ¹ö¸®°í ÀÖ½À´Ï´Ù. ½ÇÁ¦´ÂencodeURI¿¡ À̽ºÄÉÀÌÇÁ ÇÏÁö ¾Ê´Â ¹®ÀÚ¿¡ÀÇ µðÄÚµåÃÑÀ̶ó°í°¡ ºñµðÄÚµåÀÇ ´ë»óÀÌ µË´Ï´Ù.

 

¡¸ÀÌ·¯ÇÑ ¹®ÀÚ¸¦ »ç¿ëÇÏÁö ¾Ê´Â´Ù¡¹¶ó°í ÇÏ´Â °Íµµ ÇϳªÀÇ ÇØ°á¹ýÀÏÁöµµ ¸ð¸£Áö¸¸ , ³Ê¹« ÁÁÀº ¼ö´ÜÀ̶ó°í´Â ÇÒ ¼ö ¾ø½À´Ï´Ù.

 

±×·¯¸édecodeURIÇÔ¼ö¸¦ »ç¿ëÇÏÁö ¸»°ídecodeURIComponentÇÔ¼ö¸¦ »ç¿ëÇϸé ÁÁÀº °ÍÀÌ ¾Æ´Ò±î ¸»¾¸ÇϽô (ºÐ)Æíµµ ÀÖ°ÚÁö¿ä. È®½ÇÈ÷ ÀÌÂÊÀÇ ÇÔ¼ö ÂÊÀÌ ¹®Á¦¸¦ ÀÏÀ¸Å°±â ¾î·Æ½À´Ï´Ù¸¸ ,+À» ½ºÆäÀ̽º¿¡ µÇµ¹·Á ÁÖÁö ¾Ê´Â ¹®Á¦´Â ÇØ°áµÇ¾î ÀÖÁö ¾Ê½À´Ï´Ù.

 

±×¸®°í , ÄíÅ°¸¦ ÀÏ°ý encode ÇÏ´Â °æ¿ì´ÂencodeURIComponentÇÔ¼ö¸¦ ÀÌ¿ëÇؼ­´Â ¾ÈµÇ´Â °Íµµ ÀØÁö ¸»¾Æ ÁÖ¼¼¿ä.

 

¼±µÎ·Î µ¹¾Æ¿À´Â

 

 

 

 

5.        ±×·¯¸é µµ´ëü ¾î¶»°Ô Çϸé ÁÁÀº°¡?

 

Áö±Ý±îÁö »êµéÀåµµ Âü °­¿äÇÏ°í ¼³¸íÀ» ÇÏ°í ÀÖÀ¸¸é¼­ , ºÎÁ¤ÀûÀÎ °á°ú »Ó¸¸ÀÌ ¾Æ´ÑÁö , ¶ó´Â ºÒ¸¸µµ Áö¿ä. °á·ÐÀ¸·Î¼­´Â ¡¸Java°ú ȣȯ¼º ÀÖ´ÂURLÀÎÄÚµùÀÇJavaScriptÀÇ ÇÔ¼ö¸¦ ÁغñÇÑ´Ù¡¹¶ó°í ÇÏ°Ô µË´Ï´Ù.

 

ÇöÀç »óÅ·μ­´Â À¯°¨½º·´Áö¸¸encodeURI,decodeURI,encodeURIComponent,decodeURIComponentÀ̶ó°í ÇÏ´Â ÇÔ¼ö¸¦ »ç¿ëÇÒ ¼ö ¾ø´Â ºê¶ó¿ìÀú°¡ ¾ÆÁ÷µµ ¸¹ÀÌ ÀÌ¿ëµÇ°í ÀÖ´Â Çö»óÀÎ °Í , ÀÌ·¯ÇÑ ÇÔ¼ö°¡Java 2Ç÷§ÆûÀÇURLencode¿ÍÀÇ È£È¯¼ºÀÌ ¾ø´Â °ÍÀ» °¨¾ÈÇØ ,cookie°úJavaScriptÀ» »ç¿ëÇØ Å¬¶óÀ̾ðÆ®/¼­¹ö°£¿¡ Á¤º¸ ±³È¯ÇÏ´Â °æ¿ì¿¡´Â ¾î¶»°Ô Çϸé ÁÁÀº °ÍÀϱî¿ä? °á±¹ ´ÙÀ½°ú °°Àº °á·ÐÀÌ µË´Ï´Ù.

 

°á·Ð

 

JavaScriptÀÌ ¼­¹ö°¡ ¼¼Æ® ÇÑ ÄíÅ°¸¦ ó¸®ÇÏ´Â °Í °°Àº ¾îÇø®ÄÉÀ̼ǿ¡ ´ëÇØ£º

1)       ÄíÅ°ÀÇ À̸§°ú °ª ¸ðµÎURLencode ÇÏ´Â °ÍÀÌ Ãßõ µÇÁö¸¸ ,À̸§Àº ¡¸À§Ç衹ÀÌ ¾Æ´Ñ (URLencode¿¡ ¿µÇâÀ» ¹ÞÁö ¾Ê´Â´Ù ) ¹®ÀڷκÎÅÍ µÇ´Â ¿µ¼ö ij¸¯ÅÍ ¶óÀο¡ ÇÑÁ¤ÇØ¾ß ÇÕ´Ï´Ù. telnetµîÀÇ Åø¿¡ ÀÇÇÑ °ËÁõÀ̳ª µð¹ö±×ÀÇ º¯À» ¹è·ÁÇÑ °ÍÀÔ´Ï´Ù.

2)       NN¹×IEÀÇescape()°úunescape()ÇÔ¼ö´Â ¹®Á¦°¡ ÀÖÀ¸¹Ç·Î »ç¿ëÇØ µÇÁö ¾Ê½À´Ï´Ù. EncodeURI(),decodeURI(),encodeURIComponent(),decodeURIComponent()µµ , ³°Àº ¹öÁ¯ÀÇ ºê¶ó¿ìÀú¿¡¼­´Â ´ëÀÀ µÇ¾î ÀÖÁö ¾Ê°í ,j2sdk1.4°úÀÇ È£È¯¼ºÀÇ ¹®Á¦°¡ ÀÖ½À´Ï´Ù. °á±¹J2sdk1.4ÀÇjava.netÀÇ ÆÐÅ°Áö¿¡ ÀÖ´ÂURLEncoder.encode()¹×URLDecoder.decode()°ú °°Àº ±â´ÉÀ» °¡ÁøJavaScriptÀÇ ÇÔ¼ö¸¦ ÁغñÇÏ´Â °ÍÀÌ º£½ºÆ®ÀÔ´Ï´Ù. ±×·¯¸é ÀÚ½ÅÀÌ ¾î´À ºê¶ó¿ìÀú»óÀÇ ¾î´À ¹öÁ¯À¸·Î ´Þ¸®°í ÀÖÀ»±î¸¦JavaScriptÀº ½Äº°ÇÒ ÇÊ¿äµµ ¾ø¾îÁý´Ï´Ù.

URLencode´ÂUTF-8¿¡ ÅëÀÏÇÑ´Ù. ÀÌ°ÍÀºEncodeURI(),decodeURI(),encodeURIComponent(),decodeURIComponent()ÀÌUTF-8À» »ç¿ëÇÏ°í Àֱ⠶§¹®À̶ó°í ÇÏ´Â ÀÌÀ¯ÀÔ´Ï´Ù. ¶ÇJavaÀÇ »ç¾ç¿¡ ´ëÇصµUTF-8À» Ãßõ ÇÏ°í ÀÖ½À´Ï´Ù. ÀϺ»¾î¿¡¼­´Â Áö±ØÈ÷ È¿À²ÀÌ ³ª»Þ´Ï´Ù¸¸ , ÀÌ ¼¼°è¿¡¼­´ÂUTF-8À» Ç¥ÁØÀûÀ¸·Î »ç¿ëÇÏ´Â ÆíÀÌ ¹«³­ÇÏ°ÚÁö¿ä.

 

¼±µÎ·Î µ¹¾Æ¿À´Â

 

 

 

 

 

6.        UTF-8ÀÇURLencode·µðÄÚµå ÇÔ¼öÀÇ ¿¹£º

 

Unicode(1¾Æ¸£¹ÙÀÌÆ® ,2¾Æ¸£¹ÙÀÌÆ®Àå ,4¾Æ¸£¹ÙÀÌÆ®ÀåÀÌ ÀÖ´Ù ) ¸¦ ¿ÜºÎ¿Í ¾Æ¸£¹ÙÀÌÆ®¿­·Î¼­ ±³È¯ÇÏ´Â Çü½Ä(Unicode Transfer Format: UTF)¿¡´ÂUTF-8°úUTF-16ÀÌ Àß »ç¿ëµË´Ï´Ù. À̹øÀºUTF-8¿¡ ÀÇÇÑURLencode¸¦ °ËÅäÇϹǷΠ,UTF-8¿¡ÀÇURLº¯È¯¹ýÀ» ¼Ò°³ÇÕ´Ï´Ù. ÀÌ´ë·Î »ç¿ëÇҰŶó°í´Â ¸»¾¸µå¸®Áö ¾Ê½À´Ï´Ù. ÀÌ ÇÁ·Î±×·¥À» Âü°í·Î ÇØ ÁÖ½Ã¸é ´ÙÇàÀÔ´Ï´Ù.

 

 

UCSºÎÅÍUTF-8¿¡ÀÇ º¯È¯¹ýÀº ´ÙÀ½ÀÇ Å×ÀÌºí¿¡ ³ªÅ¸³½ °Íó·³ µË´Ï´Ù.

UCSºÎÅÍUTF-8¿¡ÀÇ º¯È¯¹ý

UCS-2 (UCS-4)

ºñÆ® ÆÐÅÏ

Á¦1¹ÙÀÌÆ®

Á¦2¹ÙÀÌÆ®

Á¦3¹ÙÀÌÆ®

Á¦4¹ÙÀÌÆ®

U+0000 ..

 U+007F

00000000-0xxxxxxx

0xxxxxxx

 

 

 

U+0080 ..

U+07FF

00000xxx-xxyyyyyy

110xxxxx

10yyyyyy

 

 

U+0800 ..

U+FFFF

xxxxyyyy-yyzzzzzz

1110xxxx

10yyyyyy

10zzzzzz

 

U+10000..

U+1FFFFF

00000000-000wwwxx-

xxxxyyyy-yyzzzzzzz

11110www

10xxxxxx

10yyyyyy

10zzzzzz

ÀÌ Çü½ÄÀÇ Æ¯Â¡Àº1¾Æ¸£¹ÙÀÌÆ® ¹®ÀÚ ÀÌ¿Ü´Â ¸Ç À§ÀÇ ºñÆ®(MSB)ÀÌ Á¦·Î°¡ µÇÁö ¾Ê´Â °ÍÀ¸·Î , ¸Ç À§ÀÇ ºñÆ®°¡ Á¦·ÎÀÇ ¹®ÀÚ´Â7ºñÆ®ASCIIij¸¯ÅÍ ¼¼Æ® ±× ÀÚü¶ó°í ÇÏ´Â °ÍÀÔ´Ï´Ù. µû¶ó¼­ º¯È¯ÀÇ ¾Ë°í¸®ÁòÀº Áö±ØÈ÷ °£´ÜÇÕ´Ï´Ù. URLº¯È¯¿¡ ÁîÀ½Çؼ­´Â1¾Æ¸£¹ÙÀÌÆ® Çü½Ä ÀÌ¿ÜÀÇ Çü½Ä¿¡¼­´Â ¹Ýµå½Ã °¢ ¾Æ¸£¹ÙÀÌÆ®´Â%hh°ú À̽ºÄÉÀÌÇÁ Çü½ÄÀÌ µË´Ï´Ù.

 

java.net.URLencoder.encode(String,¡±UTF-8¡±)¿¡ »ó´çÇÑ ÇÔ¼ö¸¦JavaScript¿¡ ½ÇÇöµÉ ¶§´Â , ´ÙÀ½°ú °°Àº ¾Ë°í¸®ÁòÀÌ µË´Ï´Ù.

¸¸¾à ±× ¹®ÀÚ°¡'\u0020£§¶ó¸é , ±×°ÍÀ»'\u002b£§¿¡ ¿Å°Ü³õ´Â

¡¡¡¡±×·¸Áö ¾ÊÀ¸¸é ,

¡¡¡¡¡¡¡¡¸¸¾à ±× ¹®ÀÚ°¡'\u002a£§,'\u002d£§,'\u002e£§,'\u0030£§¥¥'\u0039£§, '\u0042£§¥¥

'\u005a£§,'\u005f£§,'\u0061£§¥¥'\u007a£§(ÀÌ)°¡ ¾Æ´Ï¸é

¡¡¡¡¡¡¡¡¡¡¡¡±× ¹®ÀÚ¸¦UTF-8º¯È¯ÇØ , °¢ ¾Æ¸£¹ÙÀÌÆ®¸¦%XXÀÇ À̽ºÄÉÀÌÇÁ ij¸¯ÅÍ ¶óÀÎÀ¸·Î º¯È¯ÇÑ´Ù

 

java.net.URLdecoder.decode(String,¡±UTF-8¡±)¿¡ »ó´çÇÑ ÇÔ¼öÀÇ ¾Ë°í¸®ÁòÀº£»

¸¸¾à ±× ¹®ÀÚ°¡'+£§¶ó¸é , ±×°ÍÀ»' £§¿¡ ¿Å°Ü³õ´Â

¡¡¡¡±× ÀÌ¿ÜÀÇ ¹®ÀÚ·Î ,

¸¸¾à ±× ¹®ÀÚ°¡ À̽ºÄÉÀÌÇÁ ij¸¯ÅÍ ¶óÀÎÀ̶ó¸é ÀÌ°ÍÀ»UTF-8º¯È¯À̶ó°í ÇØ Unicode ¹®ÀÚ¿¡ µÇµ¹¸®´Â

¡¡¡¡¡¡¡¡(±× ÀÌ¿ÜÀÇ ¹®ÀÚ´Â ±×´ë·Î)

°ú °£´ÜÇÑ °ÍÀÔ´Ï´Ù.

 

ÀÌÇÏ¿¡ ±× ÇÔ¼ö¿Í ½ÇÇè¿ëHTMLÀ» ³ªÅ¸³À´Ï´Ù. ÀÌ·¯ÇÑ ÇÔ¼ö´Â Àå·¡ÀÇ È®Àå4¾Æ¸£¹ÙÀÌÆ®Àå Unicode(UCS-4)¿¡µµ ´ëÀÀÇÏ°í ÀÖ½À´Ï´Ù. ÀÌHTMLÆÄÀÏÀ» ºê¶ó¿ìÀú·Î ¿­¸®¸é(ÀÚ) ´ÙÀ½°ú °°Àº °á°ú¸¦ ¾òÀ» ¼ö ÀÖ°ÚÁö¿ä.

JavaScript¿¡ ÀÇÇÑJ2Ç÷§Æû ȣȯURLencode ÇÔ¼ö¿Í ±× Å×½ºÆ®

original string    : ³»°¢ÃѸ®´ë½Å ÄÚÀÌÁî¹Ì ÁëÀÌÄ¡·Î !"#$%&'()*+,-./01289:;<=>?@ABCXYZ[\]^_`abcxyz{|}~

URL encoded string : %e5%86%85%e9%96%a3%e7%b7%8f%e7%90%86%e5%a4%a7%e8%87%a3+%e5%b0%8f%e6%b3%89%e7%b4%94%e4%b8%80%e9

%83%8e+%21%22%23%24%25%26%27%28%29*%2b%2c-.%2f01289%3a%3b%3c%3d%3e%3f%40ABCXYZ%5b%5c%5d%5e_%60

abcxyz%7b%7c%7d%7e

URL decoded string : ³»°¢ÃѸ®´ë½Å ÄÚÀÌÁî¹Ì ÁëÀÌÄ¡·Î !"#$%&'()*+,-./01289:;<=>?@ABCXYZ[\]^_`abcxyz{|}~

 

½ÇÁ¦ÀÇ ¾îÇø®ÄÉÀ̼ǿ¡ ´ëÇØ£º

¾Æ)                À¥·¼­¹öÃøÀº ¡¸°ª¡¹ÀÇ Ä³¸¯ÅÍ ¶óÀÎÀ»java.net.URLEncoder.encode(String, ¡°UTF-8¡±)À» »ç¿ëÇØURLencode ÇØ ÄíÅ°ÀÇ ¡¸°ª¡¹¿¡ ¼¼Æ® ÇÏ´Â

ÀÌ)                ºê¶ó¿ìÀú´ÂWindow.document.cookie¿¡ ²¨³½ ij¸¯ÅÍ ¶óÀÎÀ»

(¾Æ)                      ¡¸À̸§¡¹°ú¡¸°ª¡¹¿¡ À§ÇèÇÑ ¹®ÀÚ°¡ Æ÷ÇÔµÇÁö ¾ÊÀ¸¸é ±×´ë·Î »õ·Î¿îdecodeURL()¿¡ °ÉÄ¡´ÂÁö ,

(ÀÌ)                      ¡¸°ª¡¹ÀÇ Ä³¸¯ÅÍ ¶óÀÎÀ»decodeURL()¿¡ °ÉÄ¥±î

               ÇØ ¿Ã¹Ù¸¥ ij¸¯ÅÍ ¶óÀο¡ µÇµ¹¸®°Ô µË´Ï´Ù.

¿ì)                Window.document.cookieÀ» º¯°æÇÏ´Â °æ¿ì´Â , »õ·Î¿îencodeURL()ÇÔ¼ö¸¦ »ç¿ëÇØ ¿ªÀÇ Á¶ÀÛÀ» ÇÕ´Ï´Ù. ´ÜWindow.document.cookie¿¡ ¹«¾ùÀΰ¡ »õ·Î¿î ¡¸À̸§¡¹ÀÇ Ä³¸¯ÅÍ ¶óÀÎÀ» ´ëÀÔÇÑ´Ù°í ÇÏ´Â °ÍÀº , Áö±Ý±îÁöÀÇ ÄíÅ°¿¡ »õ·Î¿î ÄíÅ°°¡ Ãß°¡µÈ´Ù ( ¡¸À̸§¡¹ÀÌ °°À¸¸é ±× ¡¸°ª¡¹À» °íÃÄ ¾µ ¼ö ÀÖ½À´Ï´Ù. ) µÇ´Â °Í¿¡ ÁÖÀÇÇսôÙ.

 

Âü°í£º

ÄíÅ°Áß¿¡¼­ ¼ÒÁ¤ÀÇ À̸§ÀÇ °ªÀ» ÃßÃâÇÏ´Â ÇÔ¼öÀÇ ¿¹ÀÔ´Ï´Ù.

  function loadCookie(name) {

        var allcookies = document.cookie;

        if (allcookies == "") return "";

        var start = allcookies.indexOf(name + "=");

        if (start == -1) return "";

        start += name.length + 1;

        var end = allcookies.indexOf(';',start);

        if (end == -1) end = allcookies.length;

        return allcookies.substring(start,end);

  }

ÄíÅ°ÀÇ ¡¸°ª¡¹ÀÌURLencode µÇ°í ÀÖ´Â °æ¿ì´Â ,

var decodedValue = decodeURL(loadCookie(name));

°ú °°ÀÌ µðÄÚµåÇÕ´Ï´Ù. ±×¸®°í ¡¸À̸§¡¹À̳ª ¡¸°ª¡¹¿¡ ¿¹¾à¾î(reserved word)°¡ Æ÷ÇÔµÇÁö ¾ÊÀº °ÍÀÌ ¶Ñ·ÇÇÑ °æ¿ì´Â

var allcookies = decodeURL(document.cookie);

À̶ó°í ÇÏ´Â ÀÏ°ýó¸®ÀÇ »ç¿ë¹ýµµ °¡´ÉÇÕ´Ï´Ù.


ÇÁ·Î±×·¥¿¹

 

<HTML>

<HEAD>

<TITLE>j2 platform equivalent URL encode/decode functions</TITLE>

<META HTTP-EQUIV="content-type" CONTENT="text/html; charset=SHIFT_JIS">

</TITLE>

<SCRIPT LANGUAGE="JavaScript">

 

/*  Function Equivalent to java.net.URLEncoder.encode(String, "UTF-8")

    Copyright (C) 2002, Cresc Corp.

    Version: 1.0

*/

function encodeURL(str){

    var s0, i, s, u;

    s0 = "";                // encoded str

    for (i = 0; i < str.length; i++){   // scan the source

        s = str.charAt(i);

        u = str.charCodeAt(i);          // get unicode of the char

        if (s == " "){s0 += "+";}       // SP should be converted to "+"

        else {

            if ( u == 0x2a || u == 0x2d || u == 0x2e || u == 0x5f || ((u >= 0x30) && (u <= 0x39)) || ((u >= 0x41) && (u <= 0x5a)) || ((u >= 0x61) && (u <= 0x7a))){       // check for escape

                s0 = s0 + s;            // don't escape

            }

            else {                  // escape

                if ((u >= 0x0) && (u <= 0x7f)){     // single byte format

                    s = "0"+u.toString(16);

                    s0 += "%"+ s.substr(s.length-2);

                }

                else if (u > 0x1fffff){     // quaternary byte format (extended)

                    s0 += "%" + (oxf0 + ((u & 0x1c0000) >> 18)).toString(16);

                    s0 += "%" + (0x80 + ((u & 0x3f000) >> 12)).toString(16);

                    s0 += "%" + (0x80 + ((u & 0xfc0) >> 6)).toString(16);

                    s0 += "%" + (0x80 + (u & 0x3f)).toString(16);

                }

                else if (u > 0x7ff){        // triple byte format

                    s0 += "%" + (0xe0 + ((u & 0xf000) >> 12)).toString(16);

                    s0 += "%" + (0x80 + ((u & 0xfc0) >> 6)).toString(16);

                    s0 += "%" + (0x80 + (u & 0x3f)).toString(16);

                }

                else {                      // double byte format

                    s0 += "%" + (0xc0 + ((u & 0x7c0) >> 6)).toString(16);

                    s0 += "%" + (0x80 + (u & 0x3f)).toString(16);

                }

            }

        }

    }

    return s0;

}

 

/*  Function Equivalent to java.net.URLDecoder.decode(String, "UTF-8")

    Copyright (C) 2002, Cresc Corp.

    Version: 1.0

*/

function decodeURL(str){

    var s0, i, j, s, ss, u, n, f;

    s0 = "";                // decoded str

    for (i = 0; i < str.length; i++){   // scan the source str

        s = str.charAt(i);

        if (s == "+"){s0 += " ";}       // "+" should be changed to SP

        else {

            if (s != "%"){s0 += s;}     // add an unescaped char

            else{               // escape sequence decoding

                u = 0;          // unicode of the character

                f = 1;          // escape flag, zero means end of this sequence

                while (true) {

                    ss = "";        // local str to parse as int

                        for (j = 0; j < 2; j++ ) {  // get two maximum hex characters for parse

                            sss = str.charAt(++i);

                            if (((sss >= "0") && (sss <= "9")) || ((sss >= "a") && (sss <= "f"))  || ((sss >= "A") && (sss <= "F"))) {

                                ss += sss;      // if hex, add the hex character

                            } else {--i; break;}    // not a hex char., exit the loop

                        }

                    n = parseInt(ss, 16);           // parse the hex str as byte

                    if (n <= 0x7f){u = n; f = 1;}   // single byte format

                    if ((n >= 0xc0) && (n <= 0xdf)){u = n & 0x1f; f = 2;}   // double byte format

                    if ((n >= 0xe0) && (n <= 0xef)){u = n & 0x0f; f = 3;}   // triple byte format

                    if ((n >= 0xf0) && (n <= 0xf7)){u = n & 0x07; f = 4;}   // quaternary byte format (extended)

                    if ((n >= 0x80) && (n <= 0xbf)){u = (u << 6) + (n & 0x3f); --f;}         // not a first, shift and add 6 lower bits

                    if (f <= 1){break;}         // end of the utf byte sequence

                    if (str.charAt(i + 1) == "%"){ i++ ;}                   // test for the next shift byte

                    else {break;}                   // abnormal, format error

                }

            s0 += String.fromCharCode(u);           // add the escaped character

            }

        }

    }

    return s0;

}

</SCRIPT>

</HEAD>

<BODY>

<PRE>

JavaScript¿¡ ÀÇÇÑJ2Ç÷§Æû ȣȯURLencode ÇÔ¼ö¿Í ±× Å×½ºÆ®

<SCRIPT LANGUAGE="JavaScript">

    s = "³»°¢ÃѸ®´ë½Å ÄÚÀÌÁî¹Ì ÁëÀÌÄ¡·Î" + " !\"#$%&'()*+" + '\u002c'+ "-./01289:;<=>?@ABCXYZ[\\]" + '\u005e' + '\u005f' + '\u0060' + "abcxyz{|}" + '\u007e';

    document.writeln("original string    : "+s);

    s = encodeURL(s);

    document.writeln("URL encoded string : "+s);

    s = decodeURL(s);

    document.writeln("URL decoded string : "+s);

</SCRIPT>

</PRE>

</BODY>

</HTML>

 

 

¼±µÎ·Î µ¹¾Æ¿À´Â

 

 


 

7.        JSP°úJavaScript°£ÀÇ ÄíÅ°¿¡ ÀÇÇÑ µ¥ÀÌÅÍ ±³È¯¿¹

 

¸¶Áö¸·¿¡ ¿©·¯ºÐÀÌ ½ÇÁ¦·Î ¼­¹öÀÇ ÇÁ·Î±×·¥ÀÌ ÀÛ¼ºµÉ ¶§ÀÇ Âü°í·Î¼­JSP°úJavaScript°£¿¡ ÅؽºÆ®¸¦ ÄíÅ°¸¦ °³ÀÔ½ÃÄÑ ±³È¯ÇÏ´Â »ùÇÃÀ» °¡¸®Å°°Ú½À´Ï´Ù.

 

 

ÀÌJSPÀ» ºê¶ó¿ìÀú°¡ ¾×¼¼½º Çϸé(ÀÚ) ´ÙÀ½°ú °°Àº È­¸éÀ» ¾òÀ» ¼ö ÀÖÀ» °ÍÀÔ´Ï´Ù.


 


µ¿ÀÛÀº ´ÙÀ½°ú °°½À´Ï´Ù£º

1.  ÃÖÃÊ·Î À¯Àú´Â ÅؽºÆ® ¿¡¸®¾î¿¡ ÀÓÀÇÀÇ ÅؽºÆ®¸¦ ÀÔ·ÂÇØ , ¡¸ÄíÅ° ±â·Ï°ú ¼Û½Å¡¹ÀÇ ¹öÆ°À» ´©¸£¸é(ÀÚ) , ±× ÅؽºÆ®´ÂURLencode µÈ ÈÄ¡±userdata¡±À̶ó°í ÇÏ´Â ¡¸À̸§¡¹ÀÇ ¡¸°ª¡¹À¸·Î Çؼ­ ÄíÅ°¿¡ ¼¼Æ® µÇ°í ¼­¹ö¿¡ º¸³»Áý´Ï´Ù.

2.  ¼­¹ö´Â Ŭ¶óÀ̾ðÆ®·ÎºÎÅÍ º¸³»Á® ¿Â ÄíÅ°ÀÇ ³»¿ëÀÇ ¸ðµç °ÍÀ» ¸ÕÀú ¡¸À̸§¡¹/¡¸°ª¡¹¼¼Æ®·Î¼­ Ŭ¶óÀ̾ðÆ®¿¡ÀÇHTMLÅؽºÆ®¿¡ ±âÀÔÇÕ´Ï´Ù. ±× ¶§ ¡¸°ª¡¹ ÂÊ ÀºURLµðÄÚµåÇÑ °ÍÀ» °ýÈ£·Î ¹­¾î ÇÔ²² ±âÀÔÇÕ´Ï´Ù.

3.  ¼­¹ö´Â¡±userdata¡±À̶ó°í ÇÏ´Â ¡¸À̸§¡¹ÀÇ ¡¸°ª¡¹ÀÇ ºÎºÐÀ»URLµðÄÚµåÇÑ À¯Àú·ÎºÎÅÍÀÇ ÅؽºÆ®¸¦ ÀçÂ÷URLencode ÇØ ÄíÅ°¿¡ ¼¼Æ® ÇÕ´Ï´Ù.

4.  Ŭ¶óÀ̾ðÆ® ÂÊÀº , ¼­¹ö·ÎºÎÅÍÀÇHTMLÅؽºÆ®¸¦ Ç¥½Ã ÇÔ°ú µ¿½Ã¿¡ , ÇÔ²² º¸³»Á® ¿ÂJavaScript¿¡ ÀÇÇØ ¼ö½ÅÇÑ ÄíÅ°ÀÇ ³»¿ëÀ» »ýÀ¸·Î Ç¥½ÃÇØ , ´ÙÀ½¿¡¡±userdata¡±ÀÇ ¡¸°ª¡¹ÀÇ ºÎºÐÀ»URLµðÄÚµåÇØ Ç¥½ÃÇÕ´Ï´Ù.

5.  ¼Û½ÅÇÑ ÅؽºÆ®¿Í µ¹·Á º¸³»Á® ¿Â ÅؽºÆ®°¡ ÀÏÄ¡Çϸé , ¿Ã¹Ù¸£°Ô ±³½ÅÀ» ÇÒ ¼ö ÀÖ´ø °ÍÀÌ µË´Ï´Ù.

 

Á¤¸»·Î ÄíÅ°°¡ ¼­¹ö¿Í Ŭ¶óÀ̾ðÆ® ½Ö¹æ¿¡¼­ ±âÀÔÇÏ°í ÀÖÀ»±î °ÆÁ¤ÀԴϱî? URLencode µÈ ÄíÅ°ÀÇ ¡¸°ª¡¹À» ºÁ ÁÖ¼¼¿ä. À̽ºÄÉÀÌÇÁ µÈ ¹®ÀÚ°¡JavaScriptÂÊ Àº ¼Ò¹®ÀÚÀÇ16Áø Ç¥½Ã ,JSPÂÊ Àº ´ë¹®ÀÚÀÇ16Áø Ç¥½Ã°¡ µÇ¾î ÀÖ½À´Ï´Ù. ÀÌ°ÍÀºJavaScriptÀÇNumber.toString(16)¸Þ¼Òµå°¡ ¼Ò¹®ÀÚ·Î Ãâ·ÂÇϴµ¥ ´ëÇØ ,Java 2Ç÷§ÆûÀÇURLEncoder.encode(String,¡±UTF-8¡±)µÇ´Â ¸Þ¼Òµå´Â ´ë¹®ÀÚ·Î Ãâ·ÂÇϱ⠶§¹®ÀÔ´Ï´Ù. ÀÌ°ÍÀ¸·Î ½Ö¹æÀÇURLó¸® ÇÔ¼ö°¡ ±â´ÉÇØ , ÇÑÆí ȣȯ¼ºÀÌ ÀâÈ÷°í ÀÖ´Â °ÍÀÌ È®Àε˴ϴÙ.

 

µ¡ºÙ¿© º¹±Í³ª °³Ç൵ ÀÔ·ÂÇÒ ¼ö Àֱ⠶§¹®¿¡ ½ÃÇèÇØ ÁÖ¼¼¿ä. HTMLÀ¸·Î´Â ÀÌ·¯ÇÑ ¹®Àڴ ǥ½ÃµË´Ï´Ù¸¸ , ¿Ã¹Ù¸£°í encode 󸮵ǰí ÀÖ´Â °ÍÀ» ¾Ë ¼ö ÀÖ½À´Ï´Ù. ºê¶ó¿ìÀúÀÇ ¼³Á¤¿¡ µû¶ó¼­´Â º¹±Í(CR: %0d)°ú °³Çà(NL: %0a)½Ö¹æÀÌ ÄíÅ°¿¡ µé¾î°¡´Â °æ¿ìµµ ÀÖ°í , °³ÇุÀÇ °æ¿ìµµ Àֱ⠶§¹®¿¡ °³Çà 󸮿¡´Â ÁÖÀÇ°¡ ÇÊ¿äÇÕ´Ï´Ù.

 

ÀÌÇÏ¿¡JSPÆäÀÌÁö¸¦ ¼Ò°³ÇÕ´Ï´Ù. JSP¼Ó ¿¡JavaScriptµµ µé¾î°¡ ÀÖÀ¸¹Ç·Î Àб⠾î·Á¿î °÷Àº Âü¾Æ ÁÖ¼¼¿ä. JSPÀÇ ÇÁ·Î±×·¥ ºÎºÐÀ» »¡°­À¸·Î ,JavaScriptÀÇ ºÎºÐÀ» ÆĶûÀ¸·Î ºÐ·ù µÇ¾î ÀÖ½À´Ï´Ù. ÀÌ ÇÁ·Î±×·¥À» ½ÇÁ¦·Î üÇèÇÑ ÈÄ , ÀÐ¾î ¹Þ´Â´Ù°í ÀÌÇØ°¡ ºü¸£´Ù°í »ý°¢ÇÕ´Ï´Ù.

<%@ page contentType="text/html; charset=Shift_JIS" session="true"

    import="java.net.*" %>

<%  Cookie[] cookies;

    Cookie cookie;

    cookies = request.getCookies();

    cookie = null;

    if (cookies != null){

        for (int i = 0; i < cookies.length; i++){

            cookie = cookies[i];

            if (cookie.getName().equals("userdata")){break;}

        }

        String encodedUserData = cookie.getValue();

        String decodedUserData = URLDecoder.decode(encodedUserData, "UTF-8");

        cookie = new Cookie("userdata", URLEncoder.encode(decodedUserData, "UTF-8"));

        cookie.setMaxAge(300);  // give 5 minute to survive for the cookie

        response.addCookie(cookie);

    }

%>

 

<HTML>

<HEAD>

<TITLE>JavaScript j2 platform equivalent URL encode/decode functions and their test</TITLE>

<META HTTP-EQUIV="content-type" CONTENT="text/html; charset=SHIFT_JIS">

</TITLE>

<SCRIPT LANGUAGE="JavaScript">

 

/*  Function Equivalent to URLEncoder.encode(String, "UTF-8")

    Copyright (C) 2002 Cresc Corp.

    Version: 1.0

*/

function encodeURL(str){

    var s0, i, s, u;

    s0 = "";                // encoded str

    for (i = 0; i < str.length; i++){   // scan the source

        s = str.charAt(i);

        u = str.charCodeAt(i);          // get unicode of the char

        if (s == " "){s0 += "+";}       // SP should be converted to "+"

        else {

            if ( u == 0x2a || u == 0x2d || u == 0x2e || u == 0x5f || ((u >= 0x30) && (u <= 0x39)) || ((u >= 0x41) && (u <= 0x5a)) || ((u >= 0x61) && (u <= 0x7a))){     // check for escape

                s0 = s0 + s;           // don't escape

            }

            else {                      // escape

                if ((u >= 0x0) && (u <= 0x7f)){     // single byte format

                    s = "0"+u.toString(16);

                    s0 += "%"+ s.substr(s.length-2);

                }

                else if (u > 0x1fffff){     // quaternary byte format (extended)

                    s0 += "%" + (oxf0 + ((u & 0x1c0000) >> 18)).toString(16);

                    s0 += "%" + (0x80 + ((u & 0x3f000) >> 12)).toString(16);

                    s0 += "%" + (0x80 + ((u & 0xfc0) >> 6)).toString(16);

                    s0 += "%" + (0x80 + (u & 0x3f)).toString(16);

                }

                else if (u > 0x7ff){        // triple byte format

                    s0 += "%" + (0xe0 + ((u & 0xf000) >> 12)).toString(16);

                    s0 += "%" + (0x80 + ((u & 0xfc0) >> 6)).toString(16);

                    s0 += "%" + (0x80 + (u & 0x3f)).toString(16);

                }

                else {                      // double byte format

                    s0 += "%" + (0xc0 + ((u & 0x7c0) >> 6)).toString(16);

                    s0 += "%" + (0x80 + (u & 0x3f)).toString(16);

                }

            }

        }

    }

    return s0;

}

 

/*  Function Equivalent to URLDecoder.decode(String, "UTF-8")

    Copyright (C) 2002 Cresc Corp.

    Version: 1.0

*/

function decodeURL(str){

    var s0, i, j, s, ss, u, n, f;

    s0 = "";                // decoded str

    for (i = 0; i < str.length; i++){   // scan the source str

        s = str.charAt(i);

        if (s == "+"){s0 += " ";}       // "+" should be changed to SP

        else {

            if (s != "%"){s0 += s;}     // add an unescaped char

            else{               // escape sequence decoding

                u = 0;          // unicode of the character

                f = 1;          // escape flag, zero means end of this sequence

                while (true) {

                    ss = "";    // local str to parse as int

                        for (j = 0; j < 2; j++ ) {  // get two maximum hex characters to parse

                            sss = str.charAt(++i);

                            if (((sss >= "0") && (sss <= "9")) || ((sss >= "a") && (sss <= "f"))  || ((sss >= "A") && (sss <= "F"))) {

                                ss += sss;          // if hex, add the hex character

                            } else {--i; break;}    // not a hex char., exit the loop

                        }

                    n = parseInt(ss, 16);           // parse the hex str as byte

                    if (n <= 0x7f){u = n; f = 1;}   // single byte format

                    if ((n >= 0xc0) && (n <= 0xdf)){u = n & 0x1f; f = 2;}   // double byte format

                    if ((n >= 0xe0) && (n <= 0xef)){u = n & 0x0f; f = 3;}   // triple byte format

                    if ((n >= 0xf0) && (n <= 0xf7)){u = n & 0x07; f = 4;}   // quaternary byte format (extended)

                    if ((n >= 0x80) && (n <= 0xbf)){u = (u << 6) + (n & 0x3f); --f;}    // not a first, shift and add 6 lower bits

                    if (f <= 1){break;}             // end of the utf byte sequence

                    if (str.charAt(i + 1) == "%"){ i++ ;}                   // test for the next shift byte

                    else {break;}                   // abnormal, format error

                }

            s0 += String.fromCharCode(u);           // add the escaped character

            }

        }

    }

    return s0;

}

 

/*  Function to get cookie parameter value string with specified name

    Copyright (C) 2002 Cresc Corp.

    Version: 1.0

*/

function loadCookie(name) {

    var allcookies = document.cookie;

    if (allcookies == "") return "";

    var start = allcookies.indexOf(name + "=");

    if (start == -1) return "";

    start += name.length + 1;

    var end = allcookies.indexOf(';',start);

    if (end == -1) end = allcookies.length;

    return decodeURL(allcookies.substring(start,end));

}

 

/*  Function to send the textarea data throuth cookie

    Copyright (C) 2002 Cresc Corp.

    Version: 1.0

*/

function sendThis(){

    document.cookie="userdata="+encodeURL(document.inForm.text.value);  //set data

    window.location.reload();   // and reload this page

}

</SCRIPT>

 

 

</HEAD>

<BODY>

JavaScript¿¡ ÀÇÇÑJ2Ç÷§Æû ȣȯURLencode ÇÔ¼ö¿ÍJSP¿¡ ÀÇÇÑ ±× Å×½ºÆ®<BR>

(URLencode µÈ ÄíÅ°ÀÇ ÆĶó¹ÌÅ͸¦ °³ÀÔ½ÃŲ ¼­ºê ·¿°úJavaScript»çÀÌÀÇ µ¥ÀÌÅÍÀÇ ±³È¯)<BR><BR>

 

<% if (cookies != null){ %>

<DIV STYLE="width: 50% word-break:break-all">

¼­¹ö°¡ ¹ÞÀº ÄíÅ°(URLµðÄÚµå ÈÄ)£º<BR><%

        for (int i = 0; i < cookies.length; i++){ %>

À̸§=<%=    cookies[i].getName() %><BR>

Ä¡=<%=      cookies[i].getValue() %><BR>

¡¡ (<%=     URLDecoder.decode(cookies[i].getValue(), "UTF-8") %>)<BR>

<%      }

    } %>

</DIV>

<P STYLE="width: 50%">

Ŭ¶óÀ̾ðÆ®°¡ ¹ÞÀº ÄíÅ°(URLencode µÇ°í ÀÖ´Ù )£º<BR>

<SCRIPT LANGUAGE="JavaScript">

    document.writeln(document.cookie);

</SCRIPT>

</P>

<P STYLE="width: 50%">

Ŭ¶óÀ̾ðÆ® ¼ö½ÅÇÑ ÄíÅ°¾ÈÀÇ µ¥ÀÌÅÍ ºÎºÐ£º<BR>

<SCRIPT LANGUAGE="JavaScript">

    document.writeln(loadCookie("userdata"));

</SCRIPT>

</P>

¼­¹ö¿¡ ¼Û½ÅÇÏ´Â ÅؽºÆ®¸¦ ±âÀÔÇØ ÁÖ¼¼¿ä£º<BR>

<FORM NAME="inForm">

<TEXTAREA ROWS="3" COLS="60" WRAP="soft" NAME="text"></TEXTAREA><BR>

<INPUT TYPE="button" VALUE="ÄíÅ° ±â·Ï°ú ¼Û½Å" ONCLICK="sendThis()">

</FORM>

 

</BODY>

</HTML>

 

ÀÌ»ó