일전에 자바스크립트에서 URL 인코딩 관련 내용을 포스팅한 적이 있습니다. 

http://jamesdreaming.tistory.com/2

(위 URL 참조)


언급하지 않은 내용중 escape() 함수가 있습니다. 


실질적으로 많이 쓰는 인코딩 및 디코딩 함수는 아래와 같습니다. 


   escape(URI)

   unescape(escapedURI)


   encodeURI(URI)

   decodeURI(encodedURI)


   encodeURIComponent(URI)

   decodeURIComponent(encodeURI)



각각의 함수는 인코딩하는 정도의 차이가 있는데요. 

그 차이점은 아래과 같습니다. 


escape(URI)

- 영문 알파벳과 숫자, 일부 특수 문자(@, *, -, _, +, / 등등)을 제외하고 모두 인코딩

- 1바이트 문자 -> %XX 형식으로 변환

- 2바이트 문자 -> %uXXXX 형식으로 변환


encodeURI(URI)

- 인터넷 주소에 사용되는 일부 특수 문자(:, ;, /, =, ?, &)는 변환하지 않음 


encodeURIComponent(URI)

- 알파벳과 숫자를 제외한 모든 문자를 인코딩 

- UTF-8 인코딩과 동일



결과는 다르지만 인코딩이라는 동일한 역할을 하는 함수들인데요, 

현재는 encodeURIComponent(URI) 함수를 가장 많이 사용하고 있습니다. 


escape 같은 경우에는 + 기호를 인코딩 하지 않기 때문에 약간의 문제가 발생하고 있습니다. 

그래서 최근엔 운영 환경에서 escape 를 사용하지 않습니다. 





블로그 이미지

쉬운코딩이최고

Android, Java, jsp, Linux 등의 프로그래밍 언어를 소개 합니다.

,

자바스크립트(javascript)를 이용하면 현재 화면에서 뒤로가기, 앞으로가기, 앞뒤 원하는 칸만큼 이동하기, 화면 리로드 하기 등등의 기능을 사용할 수 있습니다. 


이를 가능하게 하는 것이 바로 javascript 의 History Object 입니다. 

History Object 는 웹 브라우저 상에서 사용자가 방문한 URL 정보를 가지고 있습니다. 

History Object 는 Window Object의 한 부분으로 window.history 속성을 통해 접근 가능합니다. 여기서 window. 은 생략되어도 무관합니다. 


■ 뒤로가기 

<a href="javascript:history.back();">뒤로가기</a>

window.history.back(); 함수 사용


위와 같이 a tag 의 href 속성에 바로 history.back() 호출 하는 방법도 있지만 아래와 같이 다른 방법들을 사용 할 수 있습니다. 


<script type="text/javascript">

function goBack(){
window.history.back();
}

</script>

<input type="button" value="뒤로가기" onclick="goBack();" />
<a href="goBack();">뒤로가기</a>
<a href="#" onclick="goBack();">뒤로가기</a>

goBack() 이라는 스크립트 함수를 만들고 여기에 window.history.back(); 또는 history.back(); 을 선언하여 원하는 history back 이벤트를 발생 시킬수 있습니다. 

input tag 및 a tag 두가지 모두 동일 동작을 하게 됩니다. 



■ 앞으로가기 

<a href="javascript:history.forward();">앞으로 가기</a>

window.history.forward(); 함수 사용


뒤로 가기와 마찬가지로 앞으로 가기도 여러가지 방식으로 처리 가능합니다. 

<script type="text/javascript">

function goForward(){
window.history.forward();
}

</script>

<input type="button" value="앞으로 가기" onclick="goForward();" />
<a href="goForward();">앞으로 가기</a>
<a href="#" onclick="goForward();">앞으로 가기</a>



■ 원하는 페이지 수만큼 이동하기

<script type="text/javascript">

function goForward(){
window.history.go(2);
}
function goBack(){
window.history.go(-3);
}

</script>

<button onclick="goForward()">두페이지 앞으로이동</button>
<button onclick="goBack()">두페이지 뒤로이동</button>

window.history.go(); 함수 사용


go() 함수에 인자값을 추가 하여 이동하고자 하는 방향 및 페이지 수를 결정 할 수 있습니다. 

go(1) 과 같이 1 이상의 number 값을 입력 시 앞으로 이동하게 되고 

go(-1) 과 같이 -1 이하의 number 값을 입력 시 뒤로 이동하게 됩니다. 


number 대신에 URL string 을 입력하여 해당 URL로 이동하는데 사용하기도 합니다. 다만, 모든 브라우저를 지원 하는 것이 아니므로 원하는 페이지로의 이동을 하시려면 

window.location.href='jamesdreaming.tistory.com';

위와 같이 window.location.href 를 사용하시는게 좋습니다. 



■ 리로드

<a href="javascript:location.reload();">리로드</a>

window.location.reload(); 함수 사용



■ History stack count

var numberOfHistoryEntries = window.history.length;

window.history.length 를 사용하여 history stack 에 쌓여 있는 URL 정보 갯수를 가져 올 수 있습니다. 



블로그 이미지

쉬운코딩이최고

Android, Java, jsp, Linux 등의 프로그래밍 언어를 소개 합니다.

,

웹 페이지 개발 중 특정 HTML 요소에 onClick 이벤트를 발생 시 이미지 변경 또는 특정 효과를 주기 위해 class 를 추가 제거 하는 상황들이 많이 발생하게 됩니다. 


물론 큰 사이트 개발이나 유지 보수를 하는 경우라면 개발자 입장에서는 위와 같은 경우를 컨트롤 할 필요가 거의 없습니다. UI / UX 개발 담당자들 또는 퍼블리셔들이 이미 해당 HTML 요소(Check box, Radio box 등등)의 click 이벤트에 대해 처리를 해두었기 때문입니다. 


하지만 소규모 프로젝트에서 일반적으로 퍼블을 전달 받았을때 스크립트 적용은 되어 있지 않은 경우가 거의 대부분입니다. 


그렇다면 HTML 요소의 class 변경을 어떻게 해야 할까요? 

<input id="chkBox" type="checkbox" class="on"
onclick="javascript:chkBoxImageChange();" checked/>

위 코드는 간단한 체크 박스를 표기 합니다. 


기본 checked / unchecked 이미지를 사용 하지 않습니다.  

class 명이 on 일경우 check 된 스타일의 이미지를 입히고, 

class 명이 빈값일 경우 unchecked 된 스타일의 이미지를 입힌다고 가정 하겠습니다. 


chkBoxImageChange() 함수는 아래와 같이 작성하면 됩니다. 

<script type="text/javascript">

window.chkBoxImageChange = function() {
if(document.getElementById('chkBox').getAttribute('class') == 'on')
{
document.getElementById('chkBox').setAttribute('class', '');
} else {
document.getElementById('chkBox').setAttribute('class', 'on');
};
};

</script>


class 명이 on 이면 id 값이 chkBox 인 요소의 속성 값 중 class 를 빈값으로 바꾸고 

class 명이 빈값이면 id 값이 chkBox 인 요소의 속성 값 중 class 를 on 으로 바꾸는 코드 입니다. 



위와 같이 작성 할 수 있지만 HTML5 에서는 위와 같은 수고스러움을 모두 덜어 주고 있습니다. 

<script type="text/javascript">

window.fncShowHideList = function() {
document.getElementById('chkBox').classList.toggle('on');
};

</script>

HTML5에서는 classList 라는 속성을 제공하고 있는데요. 이녀석은 class 값을 더욱 쉽게 가지고 놀수 있도록 도와 주고 있습니다. 


classList.toggle('class명') 이라고 작성 했을 경우 class명이 존재 하면 삭제를 하고 존재하지 않을 경우 추가를 하는 동작을 합니다. 


jQuery 의 toggle 과 동일한 동작을 하는 거죠. 다만 jQeury 는 사용하기 위해 Library 를 추가 해야 하지만 HTML5 는 그럴 필요가 없다는 겁니다. 



Element.classList 사용 예를 추가로 보여드리겠습니다. 

div.classList.remove("foo");
div.classList.add("newclass");

<div> 태그 class 명에 foo 값이 있으면 제거하고 newclass 라는 class 명을 추가 합니다. 


div.classList.toggle("visible");

첫 샘플에서는 getElementById('id') 로 해당 ID값에 대해 class 추가 / 삭제 여부를 결정 했다면 이번에는 <div> 태그 전체에서 class 명 중 visible 있으면 삭제하고 없으면 추가 하는 명령입니다. 


div.classList.toggle("visible", i < 10 );

for loop 이나 while loop 을 돌리고 있을 경우 i 값으로 카운트 한다고 가정했을때 i 값이 10보자 작을 경우에만 class 명이 visible 이 있으면 삭제하고 없으면 추가 하는 명령입니다. i 값이 10보다 커지면 아무 동작 하지 않습니다. 


alert(div.classList.contains("foo"));

contains 라는 함수가 보이는 데요. 이는 foo 라는 class 명이 있으면 true 를 리턴하고 없으면 false 를 리턴합니다. 


div.classList.add("foo", "bar");
div.classList.remove("foo", "bar");

class 명을 , 로 구분하여 한번에 여러 class 명을 추가 / 삭제 하는 명령입니다. 



IE 10 에서는 동작하지 않는 다는 글이 있습니다. (제가 테스트 해보지는 못했습니다. 테스트 후 확인 되면 명확하게 내용 추가 하도록 하겠습니다. )

그래서 PC 환경에서는 적용하기 약간은 부담이 될 수도 있지만 모바일 환경이라면 마음 놓고 사용하셔도 문제 없을 것 같습니다. 

블로그 이미지

쉬운코딩이최고

Android, Java, jsp, Linux 등의 프로그래밍 언어를 소개 합니다.

,

Front End 개발 중 자주 대면하게 되는 문제점중 하나가 한글 인코딩 문제이다.

한글을 그대로 파싱 할 경우 오류가 발생하게 되는데 이를 해결하는 방법은 아래와 같다.


http://www.mywebpage.com/한글.jsp


위와 같이 한글이 포함된 URL 이 있다고 가정했을 경우 URL 인코딩을 하게 되면 


http://www.mywebpage.com/%ED%95%9C%EA%B8%80.jsp

위와 같이 이스케이프 처리 되며 이를 받는 쪽에서는 decode 처리 하여 처음 원했던 URL 을 획득할 수 있다. 



인터넷에서 URL 처리는 ASCII 캐릭터 셋으로만 처리되는데 한글을 ASCII 코드로 변환할 필요가 있음으로 URL 인코딩을 하게 된다.




처리 방법은 아래와 같다.


▶ 한글 인코딩 > encodeURI() 함수 사용

var encodeStr = encodeURI("http://www.mywebpage.com/한글.jsp");

// 결과 값 >>> http://www.mywebpage.com/%ED%95%9C%EA%B8%80.jsp


▶ 인코딩 된 한글 디코딩 > decodeURI() 함수 사용

var decodeStr = decodeURI(encodeStr);

// 결과 값 >>> http://www.mywebpage.com/한글.jsp



encodeURI() 및 decodeURI() 는 한글만 처리 해주고 있지만 URL 전체를 처리하고자 할 경우 

encodeURIComponent() 및 decodeURIComponent() 를 사용하면 된다.


▶ URL 전체 인코딩 > encodeURIComponent() 함수 사용

var encodeStr = encodeURI("http://www.mywebpage.com/한글.jsp");

// 결과 값 >>> http%3A%2F%2Fwww.mywebpage.com%2F%ED%95%9C%EA%B8%80.jsp


▶ 인코딩 된 URL 전체 디코딩 > decodeURIComponent() 함수 사용

var decodeStr = decodeURI(encodeStr);

// 결과 값 >>> http://www.mywebpage.com/한글.jsp



사용 목적에 따라 encodeURI() / decodeURI() 또는 encodeURIComponent() / decodeURIComponent() 를 사용하면 된다. 



HTML5 에서의 default character set 은 UTF-8 이며, 아래는 ASCII 코드 표 이다.

( Reference : http://www.w3schools.com/tags/ref_urlencode.asp )

CharacterFrom Windows-1252From UTF-8
space%20%20
!%21%21
"%22%22
#%23%23
$%24%24
%%25%25
&%26%26
'%27%27
(%28%28
)%29%29
*%2A%2A
+%2B%2B
,%2C%2C
-%2D%2D
.%2E%2E
/%2F%2F
0%30%30
1%31%31
2%32%32
3%33%33
4%34%34
5%35%35
6%36%36
7%37%37
8%38%38
9%39%39
:%3A%3A
;%3B%3B
<%3C%3C
=%3D%3D
>%3E%3E
?%3F%3F
@%40%40
A%41%41
B%42%42
C%43%43
D%44%44
E%45%45
F%46%46
G%47%47
H%48%48
I%49%49
J%4A%4A
K%4B%4B
L%4C%4C
M%4D%4D
N%4E%4E
O%4F%4F
P%50%50
Q%51%51
R%52%52
S%53%53
T%54%54
U%55%55
V%56%56
W%57%57
X%58%58
Y%59%59
Z%5A%5A
[%5B%5B
\%5C%5C
]%5D%5D
^%5E%5E
_%5F%5F
`%60%60
a%61%61
b%62%62
c%63%63
d%64%64
e%65%65
f%66%66
g%67%67
h%68%68
i%69%69
j%6A%6A
k%6B%6B
l%6C%6C
m%6D%6D
n%6E%6E
o%6F%6F
p%70%70
q%71%71
r%72%72
s%73%73
t%74%74
u%75%75
v%76%76
w%77%77
x%78%78
y%79%79
z%7A%7A
{%7B%7B
|%7C%7C
}%7D%7D
~%7E%7E
 %7F%7F
`%80%E2%82%AC
%81%81
%82%E2%80%9A
ƒ%83%C6%92
%84%E2%80%9E
%85%E2%80%A6
%86%E2%80%A0
%87%E2%80%A1
ˆ%88%CB%86
%89%E2%80%B0
Š%8A%C5%A0
%8B%E2%80%B9
Œ%8C%C5%92
%8D%C5%8D
Ž%8E%C5%BD
%8F%8F
%90%C2%90
%91%E2%80%98
%92%E2%80%99
%93%E2%80%9C
%94%E2%80%9D
%95%E2%80%A2
%96%E2%80%93
%97%E2%80%94
˜%98%CB%9C
%99%E2%84
š%9A%C5%A1
%9B%E2%80
œ%9C%C5%93
%9D%9D
ž%9E%C5%BE
Ÿ%9F%C5%B8
 %A0%C2%A0
¡%A1%C2%A1
¢%A2%C2%A2
£%A3%C2%A3
¤%A4%C2%A4
¥%A5%C2%A5
¦%A6%C2%A6
§%A7%C2%A7
¨%A8%C2%A8
©%A9%C2%A9
ª%AA%C2%AA
«%AB%C2%AB
¬%AC%C2%AC
%AD%C2%AD
®%AE%C2%AE
¯%AF%C2%AF
°%B0%C2%B0
±%B1%C2%B1
²%B2%C2%B2
³%B3%C2%B3
´%B4%C2%B4
µ%B5%C2%B5
%B6%C2%B6
·%B7%C2%B7
¸%B8%C2%B8
¹%B9%C2%B9
º%BA%C2%BA
»%BB%C2%BB
¼%BC%C2%BC
½%BD%C2%BD
¾%BE%C2%BE
¿%BF%C2%BF
À%C0%C3%80
Á%C1%C3%81
Â%C2%C3%82
Ã%C3%C3%83
Ä%C4%C3%84
Å%C5%C3%85
Æ%C6%C3%86
Ç%C7%C3%87
È%C8%C3%88
É%C9%C3%89
Ê%CA%C3%8A
Ë%CB%C3%8B
Ì%CC%C3%8C
Í%CD%C3%8D
Î%CE%C3%8E
Ï%CF%C3%8F
Ð%D0%C3%90
Ñ%D1%C3%91
Ò%D2%C3%92
Ó%D3%C3%93
Ô%D4%C3%94
Õ%D5%C3%95
Ö%D6%C3%96
×%D7%C3%97
Ø%D8%C3%98
Ù%D9%C3%99
Ú%DA%C3%9A
Û%DB%C3%9B
Ü%DC%C3%9C
Ý%DD%C3%9D
Þ%DE%C3%9E
ß%DF%C3%9F
à%E0%C3%A0
á%E1%C3%A1
â%E2%C3%A2
ã%E3%C3%A3
ä%E4%C3%A4
å%E5%C3%A5
æ%E6%C3%A6
ç%E7%C3%A7
è%E8%C3%A8
é%E9%C3%A9
ê%EA%C3%AA
ë%EB%C3%AB
ì%EC%C3%AC
í%ED%C3%AD
î%EE%C3%AE
ï%EF%C3%AF
ð%F0%C3%B0
ñ%F1%C3%B1
ò%F2%C3%B2
ó%F3%C3%B3
ô%F4%C3%B4
õ%F5%C3%B5
ö%F6%C3%B6
÷%F7%C3%B7
ø%F8%C3%B8
ù%F9%C3%B9
ú%FA%C3%BA
û%FB%C3%BB
ü%FC%C3%BC
ý%FD%C3%BD
þ%FE%C3%BE
ÿ%FF%C3%BF


블로그 이미지

쉬운코딩이최고

Android, Java, jsp, Linux 등의 프로그래밍 언어를 소개 합니다.

,