์ฟ ํค ๊ฐ์ ์ด์ค์ผ์ดํํ๊ธฐ ์ํด ์ฌ๊ธฐ์์ encodeURIComponent()๊ฐ ๋ง์ต๋๊น? '๋๋ง'์ด ๋์ด์ผ ํ์ง ์๊ฒ ์ต๋๊น?
์ฟ ํค๋ ํ๋ฌ๊ทธ์ธ์ ์ ๋ค์ด์ค๊ณ ๋์ง๋ง ๊ฒฝ๋ก ์ด๋ฆ์ด ํฌํจ๋ ์ฟ ํค๋ ์ธ์ฝ๋ฉ ์ ํ์ผ๋ก ์ธํด ๋ค๋ฅธ ์ฌ๋์ด ์๋ ๊ทธ๋๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค.
encodeURIComponent
/ decodeURIComponent
๋ฅผ ์ฌ์ฉํ๋ ์ด์ ๋ escape
/ unescape
๊ฐ ๋ ์ด์ ์ฌ์ฉ๋์ง ์๊ธฐ ๋๋ฌธ ์
๋๋ค.
๊ทธ ์ธ์๋ ์ฌ๊ธฐ์ ๋ฌธ์ ๊ฐ ๋ฌด์์ธ์ง ์์ง ์ดํดํ์ง ๋ชปํ์ต๋๋ค. ์ฟ ํค ๊ฐ์ ๋ฐํ๋๊ธฐ ์ ์ decodeURIComponent๋ฅผ ํตํด ์คํ๋ฉ๋๋ค. ๋ฐ๋ผ์ ๋๋ฝ๋ ๊ฒ์ด ์์ผ๋ฉด ์ฟ ํค์ ์ ๋ฌ๋์์ ๋์ ์ ํํ ๋์ผํด์ผ ํฉ๋๋ค. ๋ฌธ์ ๋ฅผ ์ค๋ช ํ๊ธฐ ์ํด ์์ ์ด๋ ๋ด์ฉ์ ๊ฒ์ํด ์ฃผ์๊ฒ ์ต๋๊น?
๋ง์ง๋ง์ผ๋ก raw
์ต์
์ ์ฌ์ฉํ์ฌ ์ฒ์๋ถํฐ ์ธ์ฝ๋ฉ์ ์ฐํํ ์ ์์ต๋๋ค.
๋น์ ์ด ๋ ์ด์ ์ฌ์ฉ๋์ง ์๋ ๊ฒ์ ๋ํด ์ณ์ต๋๋ค. ์๋ง๋ encodeURI()๋ encodeURIComponent() ๋์ ์ ์ค์ ๋ก ํ์ํ ๊ฒ์ ๋๋ค.
๊ฐ๋จํ ๋งํด์ ๋ฌธ์ ๊ฐ ์์ต๋๋ค. ๊ทํ์ ์ฝ๋๋ ํ๋ฌ๊ทธ์ธ์ ํตํด ์ฟ ํค๊ฐ ์์ฑ๋๊ณ ์๋น๋๋ ๊ฒฝ์ฐ์๋ง ์๋ํฉ๋๋ค. ํ๋ฌ๊ทธ์ธ์ ์ฌ์ฉํ์ฌ ์ฟ ํค๋ฅผ ๋ง๋ ๋ค์ PHP ๋๋ Java ์ฑ์์ ์ฟ ํค๋ฅผ ์ฝ์ผ๋ ค๊ณ ํ๋ฉด ํด๋น ์ฑ์ ์ฟ ํค๊ฐ encodeURIComponent()๋ก ์ธ์ฝ๋ฉ๋๊ณ ๋ฐฑ์๋์์ urldecoded()์ฌ์ผ ํ๋ค๋ ๊ฒ์ ์์์ผ ํฉ๋๋ค.
์ด๊ฒ์ด ๋ฌธ์ ๋ฅผ ์ผ์ผํค๋ ์ฃผ์ ์ฅ์๋ ์ฟ ํค์ URL์ด๋ URI๋ฅผ ๋ฃ์ ๋์ ๋๋ค. ์ฟ ํค์ "/foo"๋ฅผ ๋ฃ๊ณ ์ถ๋ค๊ณ ๊ฐ์ ํด ๋ด ์๋ค. EncodeURIComponent()๋ ์ฌ์ฉํ ์ ์๋ ๊ฒฝ๋ก ์ด๋ฆ "%2Ffoo"๋ฅผ ์ ๊ณตํ๋ ๋ฐ๋ฉด, encodeURI()๋ ๋ฐฑ์๋ ์์คํ ์ด๋ ํ๋ฌ๊ทธ์ธ ์์ด ์ฟ ํค๋ฅผ ์ฌ์ฉํ๋ ๋ค๋ฅธ ์ฌ๋์ด ์ง์ ์ฌ์ฉํ ์ ์๋ "/foo"๋ฅผ ์ ๊ณตํฉ๋๋ค.
์ฌ๊ธฐ์ encode()์ ์ฅ์ ์ ์ค์ ๋ก ์ฟ ํค ๊ฐ์ ์ธ๋ฏธ์ฝ๋ก ์ด ์์ผ๋ฉด ์ด์ค์ผ์ดํ ์ฒ๋ฆฌ๋๋ค๋ ๊ฒ์ ๋๋ค. encodeURI()๋ ์ธ๋ฏธ์ฝ๋ก ์ ์ด์ค์ผ์ดํํ์ง ์์ผ๋ฏ๋ก encodeURI()๋ฅผ ์ฌ์ฉํ๋ ๊ฒ ์ธ์ ์ด๋ฅผ ์ฒ๋ฆฌํ๋ ์ฝ๋๋ฅผ ์ถ๊ฐํด์ผ ํฉ๋๋ค.
Raw๋ ๊ด์ฐฎ์ง๋ง ์ธ์ฝ๋ฉ์ ๋ฌธ์ ๊ฐ ์๊ธฐ ๋๋ฌธ์ ์ถ๊ฐํ ๊ฒ ๊ฐ์ต๋๋ค. encodeURI()๋ฅผ ์ฌ์ฉํ๋ค๋ฉด ์๋ง๋ ๋ ์ด์ ํ์ํ์ง ์์ ๊ฒ์ ๋๋ค.
encodeURI
์ฌ์ฉํ ์ ์๋ ์ด์ :
encodeURI('foo;bar') == "foo;bar"
ํ์ง๋ง:
encodeURIComponent('foo;bar') == "foo%3Bbar"
ํ์๋ ์ฐ๋ฆฌ๊ฐ ์ํ๋ ํ๋์ ๋๋ค.
raw
๋ ์ค์ ๋ก ์๋ฒ์ ์ ๋๊ธฐ ์ํด ์ถ๊ฐ๋์์ต๋๋ค.
์ ๊ทธ๋ฐ ํ๋์ ์ํ๋์ง ๊ถ๊ธํฉ๋๋ค. ๋ค๋ฅธ ๊ณณ์์ ๋ต์ ์ฐพ๊ธฐ ์ํด ๊ณ ๊ตฐ๋ถํฌ http://stackoverflow.com/questions/5743119/why-use-encodeuricomponent-when-writing-json-to-a-cookie
๋ค๋ฅธ ์ฌ๋์ด ๋์ ๊ฐ์ ๋ต๋ณ์ ๊ฒ์ํ๋ ๋์ ์ด ํ ๋ก ์ ์ฐพ์ ๊ฒฝ์ฐ:
์ฟ ํค๋ HTTP ํค๋๋ก ์๋ฒ์ ์ ๋ฌ๋ฉ๋๋ค.
์ฟ ํค: ์ด๋ฆ1=๊ฐ1; ์ด๋ฆ2=๊ฐ2
๋ถ๋ช ํ value1์๋ ;
๋ค๋ฅธ ๋ฌธ์ ๊ฐ ์๋ ์บ๋ฆญํฐ๋ ์์ต๋๋ค.
์ฌ์ค ์ฟ ํค๋ ์ธ์ฝ๋ฉ ๋ถ์กฑ์ผ๋ก ์ธํด ๊ทผ๋ณธ์ ์ผ๋ก ๋ฐฉํด๋ฅผ ๋ฐ์ต๋๋ค. ์ธ์ฝ๋ฉ์ ์ ํํ๊ณ ๋ธ๋ผ์ฐ์ ์ ์๋ฒ ๋ชจ๋์์ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
MDN์ encodeURIComponent๋ฅผ ๊ถ์ฅํฉ๋๋ค: https://developer.mozilla.org/en-US/docs/Web/API/document.cookie
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
๋ค๋ฅธ ์ฌ๋์ด ๋์ ๊ฐ์ ๋ต๋ณ์ ๊ฒ์ํ๋ ๋์ ์ด ํ ๋ก ์ ์ฐพ์ ๊ฒฝ์ฐ:
์ฟ ํค๋ HTTP ํค๋๋ก ์๋ฒ์ ์ ๋ฌ๋ฉ๋๋ค.
์ฟ ํค: ์ด๋ฆ1=๊ฐ1; ์ด๋ฆ2=๊ฐ2
๋ถ๋ช ํ value1์๋ ;
๋ค๋ฅธ ๋ฌธ์ ๊ฐ ์๋ ์บ๋ฆญํฐ๋ ์์ต๋๋ค.
์ฌ์ค ์ฟ ํค๋ ์ธ์ฝ๋ฉ ๋ถ์กฑ์ผ๋ก ์ธํด ๊ทผ๋ณธ์ ์ผ๋ก ๋ฐฉํด๋ฅผ ๋ฐ์ต๋๋ค. ์ธ์ฝ๋ฉ์ ์ ํํ๊ณ ๋ธ๋ผ์ฐ์ ์ ์๋ฒ ๋ชจ๋์์ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
MDN์ encodeURIComponent๋ฅผ ๊ถ์ฅํฉ๋๋ค: https://developer.mozilla.org/en-US/docs/Web/API/document.cookie