NAVER, KAKAO ๋ฑ ๊ฐํธ ๋ก๊ทธ์ธ์ ๊ตฌํํ๋ ๊ณผ์ ์์ redirectUrl๊ฐ ์ฟผ๋ฆฌ ํ๋ผ๋ฏธํฐ๋ก ๋ค์ด๊ฐ๋ค.
์ฝ๋์ ๋ฐ๋ผ ์ฟผ๋ฆฌ ํ๋ผ๋ฏธํฐ๋ฅผ encodeURI() ์ฒ๋ฆฌํ๊ธฐ๋, ์ฒ๋ฆฌํ์ง ์๊ธฐ๋ ํ๋๋ฐ ๋ด๊ฐ ์ํ์ผ์ ํ ์คํธํ์ ๋์๋ ๋ ๋ค ํฐ ๋ฌธ์ ์์ด ์๋์ด ๋์๋ค.
"์ฅ ๊ทธ๋ฌ๋ฉด ์ด ํจ์๋ ์ ์๋ ๊ฑฐ์ง?"
๊ถ๊ธํด์ ธ์ mdn ๋ฌธ์๋ฅผ ์ฐธ๊ณ ํด๋ณธ๋ค.
encodeURI() ํจ์๋ URI์ ํน์ ํ ๋ฌธ์๋ฅผ UTF-8๋ก ์ธ์ฝ๋ฉํด ํ๋, ๋, ์ , ํน์ ๋ค ๊ฐ์ ์ฐ์๋ ์ด์ค์ผ์ดํ ๋ฌธ์๋ก ๋ํ๋ ๋๋ค. (๋ ๊ฐ์ ๋๋ฆฌ ๋ฌธ์๋ก ์ด๋ฃจ์ด์ง ๋ฌธ์๋ง ์ด์ค์ผ์ดํ ๋ฌธ์ ๋ค ๊ฐ๋ก ๋ณํ๋ฉ๋๋ค.)
(๋๋ฆฌ ๋ฌธ์? ์ด์ค์ผ์ดํ ๋ฌธ์? ํ๊ธ์ธ๋ฐ ์ ์ง ์์ด๊ฐ ๋ ์ ์ดํด๋ ๊ฒ ๊ฐ์ ํฌ์ค์ด๋ค.)
๊ทธ๋์ ์์ด ๋ฌธ์๋ก ๋ค์ ํ์ธํด๋ณด์.
๋๋ฆฌ ๋ฌธ์: surrogate character
์ด์ค์ผ์ดํ ๋ฌธ์: escape character
๐ ์ด์ค์ผ์ดํ ๋ฌธ์(escape character)
์ํ, %D1%88 ์ ๋ ๊ฒ ์๊ธด ๊ฒ ์ด์ค์ผ์ดํ ๋ฌธ์๊ตฌ๋.
'์ด์ค์ผ์ดํํ๋ค.'๋ผ๋ ๊ฒ์ด ์ด์ค์ผ์ดํ ๋ฌธ์๋ก ์ธ์ฝ๋ฉํ๋ค๋ ์๋ฏธ์ธ ๊ฒ ๊ฐ์๋ฐ...
์?
๋ฐฑ์ฌ๋์ฌ๋ ์ฐ๋ ์๋ค์ ์ด์ค์ผ์ดํ ๋ฌธ์๋ผ๊ณ ๋ถ๋ ์๊ตฌ๋...
์ผ๋ฐ์ ์ผ๋ก ๋ฌธ์์ด ์์ ํฌํจํ ์ ์๋ ๋ฌธ์๋ฅผ ๋ฃ๊ธฐ ์ํด ๋์ฉ์ผ๋ก ์ฌ์ฉํ๋ ๋ฌธ์๋ผ๊ณ ์ ๋ฆฌํ๋ฉด ๋๊ฒ ๋ค.
์๋ฅผ ๋ค์ด ๊ณต๋ฐฑ์ URI์ ํฌํจํ ์ ์๊ธฐ ๋๋ฌธ์ encodeURIํ๋ฉด %20์ผ๋ก ์ธ์ฝ๋ฉ๋๋ค. ์ด์ ์ดํด๊ฐ ๋๋ค.
๐ ๋๋ฆฌ ๋ฌธ์(surrogate character)
// high-low pair ok
console.log(encodeURIComponent("\uD800\uDFFF"));
// lone high surrogate throws "URIError: malformed URI sequence"
console.log(encodeURIComponent("\uD800"));
// lone low surrogate throws "URIError: malformed URI sequence"
console.log(encodeURIComponent("\uDFFF"));
์ ๋ฐ ๋ฌธ์๋ฅผ ๋๋ฆฌ ๋ฌธ์๋ผ ํ๋ค๋๋ฐ...
์์ฒญ ์ค๋ช ์ด ์ ๋์ด์๋ ๋ค์ด๋ฒ ๋ธ๋ก๊ทธ ๋ฐ๊ฒฌ (๋ธ๋ก๊ทธ ๋ฐ๋ก๊ฐ๊ธฐ)
UTF-16๋ 0x0000๋ถํฐ 0xFFFF๊น์ง์ ๊ฐ์ผ๋ก ๋ฌธ์๋ฅผ ๋ํ๋ด๋๋ก ํ๋ค. ํ์ง๋ง, ์ดํ ์ปดํจํฐ๋ก ํํํด์ผ ํ๋ ๋ฌธ์๊ฐ 1,114,111(0x10FFFF=21bits)๋งํผ ๋ ๋๋จธ์ง, ๊ธฐ์กด UTF-16์ผ๋ก ๋ชจ๋ ๋ฌธ์์ ํํ์ด ๋ถ๊ฐ๋ฅํ๊ฒ ๋์๋ค.
ํ ์๋ฆฌ๋ฅผ ๋๋ ค์ UTF-32 ์ฒด๊ณ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ๋ ๊ฐ๋ฅํ์ง๋ง ๋ฉ๋ชจ๋ฆฌ ์ฉ๋์ ๋ญ๋น๊ฐ ์ง์์ ์ผ๋ก ๋ฐ์ํ๊ธฐ์ ์์ฃผ ์ฌ์ฉ๋์ง ์๋ ๋ฌธ์๋ ๋ ๊ฐ์ character๋ฅผ ์ฌ์ฉํ์ฌ ํํํ๊ธฐ๋ก ํ๋ค. (
๋ฐ๋ผ์, surrogate ๋ฌธ์๋ ํญ์ ์ง์ง์ด์! ๋ ๊ฐ์ฉ ๋ถ์ด๋ค๋๋ค ๐ค
์์ surrogate์ ๋ฒ์๋ U+D800~U+DBFF์ด๊ณ , ํ์ surrogate๋ U+DC00~U+DFFF์ด๋ค. ์์-ํ์ ์์๋ก ์ง์ ๋งบ๋๋ค.
๊ทธ๋ฆฌ๊ณ ๋ฒ์๋ฅผ ์ธ๋ณด๋ฉด ์๊ฒ ์ง๋ง, ํ์์ ์์ ๊ฐ๊ฐ 1024๊ฐ ๋ฌธ์๋ฅผ ์ปค๋ฒํ์ฌ์ ํํ ๊ฐ๋ฅํ ์ด ๋ฌธ์๋ 1024^2=1,048,576๊ฐ์ด๋ค. (surrogate ๋ฌธ์๋ก ์ฌ์ฉ๋์ง ์๋ ๋ฒ์๋ ๊ธฐ๋ณธ ์ ๋์ฝ๋ ๋ฌธ์๋ฅผ ๊ฐ๋ฆฌํจ๋ค. ์ด๋ฌ๋ฉด ๋์ฝ๋๊ฐ ํด์ํ ๋ ๋ฌธ์ ์์ง)
๋งค์ฐ ํ๋ฅญํ ๋ฌธ์ ์ธ์ฝ๋ฉ์ ๋ํ ์ค๋ช ์์
๋จ์ํ ์ปดํจํฐ๐ฅธ์จ๋ฅผ ์ดํด์ํค๋ฉด์๋ ๋ฉ๋ชจ๋ฆฌ ํจ์จ์ฑ์ ๋์ด๊ธฐ ์ํ ๋ฌธ์ ์ธ์ฝ๋ฉ์ ๊ฐ๋ฐ ๋ฐฐ๊ฒฝ์ด ์ ์ค๋ช ๋์ด์๋ค ๐
๊ทธ๋ฆฌ๊ณ UTF-8... ์ธ์ฝ๋ฉ ๋ฐฉ๋ฒ ์ต์ ํ๋ฅผ ์ํด ์ ๋ง ๋ง์ ๋ ธ๋ ฅ์ด ๋ค์ด๊ฐ๋ค๋ ๊ฒ์ ์ ์ ์์๋ค. (์์ง ์ดํด๋ฅผ ๋ค ๋ชปํ๋ค...)
๐ก๋ฌธ์ ์ธ์ฝ๋ฉ ์ดํด๋ ์์น
์ปดํจํฐ ๊ณตํ ์๋ก ์์ ์์ ์ด์ ๋ธ๋ฆฌ ๋ฐฐ์ ์ ๋ ๋๊ผ๋ ๊ธฐ๋ถ๊ณผ 80% ์ ์ฌํ ๊ธฐ๋ถ์ด์๋ค.!
๊ทธ๋ฆฌ๊ณ ์ธ๊ณ์ด์ฒ๋ผ ์น๋ถํ๋ ๋ฌธ์ ์ธ์ฝ๋ฉ ๋ถ๋ถ์ ์ดํด๋๊ฐ ์ฅ์ฅ ๐ฑ
์ด์ผ ๋ฉ์ง ๊ฑธ