[JavaScript] encodeURIComponent() 함수에서 홑따옴표가 encode되지 않음 (single quote)
JavaScript 2014. 7. 30. 17:53encodeURIComponent() 함수가 escase 시키지 않는 문자는 다음과 같음.
영문 알파벳
정수
-_.!~*'()
이 중 짜증 나는 경우가 하나 있을 수 있는 것이 홑따옴표임.
예를 들어 js 레벨에서 <form>과 <input type="hidden">을 만들어서 submit을 하려고 하는데,
<input type="hidden">을 만들 때 다음처럼 할 경우이다.
var frm = $('#frm');
var val = encodeURIComponent("요롱'이");
// attribute 할당시 쌍따옴표가 아니라 홑따옴표를 사용할 경우
// encodeURIComponent는 홑따옴표를 escape하지 않으므로 닫기로 인식되어 그 뒤의 문자열이 잘림.
// 이건 encodeURIComponent를 사용하지 않는다 해도 동일함.
frm.append("<input type='hidden' value='"+val+"'");
여튼 이런저런 거지같은 상황을 막기 위해 encodeURIComponent() 함수가 홑따옴표를 비롯한 나머지 특수문자들도 escape하길 바란다면,
아래와 같은 식의 함수를 사용할 것.
function encodeAll(s)
{
return encodeURIComponent(s).replace(/[!'()*]/g, escape); // escape시킬 문자를 추가지정
}