js 에서 인 코딩 함수:escape,encodeURI 와 encodeURIComponent 상세 설명

1.eacape():이 방법 은 ASCII 자모 와 숫자 를 인 코딩 하지 않 고 아래 의 ASCII 문장 부 호 를 인 코딩 하지 않 습 니 다:*@- +./.다른 모든 문 자 는 전의 시퀀스 로 대 체 됩 니 다.다른 경우 escape,encodeURI,encodeURIComponent 인 코딩 결과 가 같 습 니 다.
   escape 0-255 이외 의 유 니 코드 값 을 인 코딩 할 때 출력%u***형식
   unescape()를 사용 하여 escape()인 코딩 된 문자열 을 디 코딩 할 수 있 습 니 다.
   ECMAScript v3 는 이 방법 을 사용 하 는 것 을 반대 합 니 다.decodeURI()와 decodeURIComponent()를 사용 하여 대체 합 니 다.
2.encodeURI 와 encodeURIComponent
encodeURI 와 encodeURIComponent 는 모두 ECMA-262 표준 에서 정 의 된 함수 입 니 다.이 표준 을 호 환 하 는 모든 언어(예 를 들 어 JavaScript,ActionScript)는 이 두 함 수 를 실현 합 니 다.그것들 은 모두 URI(RFC-2396)문자열 을 인 코딩 하 는 전역 함수 이지 만,그들의 처리 방식 과 사용 장면 은 다르다.이들 의 차 이 를 설명 하기 위해 서 는 먼저 RFC-2396 에서 URI 에 대한 문자 분 류 를 이해 해 야 합 니 다.
1>보존 문자(reserved characters):이러한 문 자 는 URI 의 보존 키 문자 로 URI 의 각 부분 을 분할 하 는 데 사 용 됩 니 다.이 문자 들 은";"|"/"|"?"|":"|"@"|"&"|"="|"+"|"$"|","
2>Mark 문자(mark characters):이 문 자 는 RFC-2396 에서 특별히 정의 되 었 으 나 용 도 를 특별히 설명 하지 않 았 으 며 다른 RFC 표준 과 관련 이 있 을 수 있 습 니 다.이 문자 들 은"-"|""|"."|"!"|"~"|"*"|"""|"("|")"입 니 다.
3>기본 문자(alphanum characters):이 문 자 는 URI 의 주체 부분 으로 모든 대문자,소문 자,숫자 를 포함한다.
위의 세 가지 문자열 을 소개 한 후에 우 리 는 encodeURI 와 encodeURIComponent 함수 의 차이 점 을 쉽게 설명 할 수 있 습 니 다.
encodeURI:이 함 수 는 문자열 에 들 어 오 는 모든 비(기본 문자,Mark 문자,보존 문자)를 전의 인 코딩(escaping)합 니 다.전의 가 필요 한 모든 문 자 는 UTF-8 인 코딩 에 따라 하나,두 개 또는 세 바이트 의 16 진 전의 문자(%x)로 전 환 됩 니 다.예 를 들 어 문자 빈 칸'을'%20'으로 변환 합 니 다.이 인 코딩 모드 에서 인 코딩 이 필요 한 ASCII 문 자 는 하나의 바이트 전의 문자 로 대체 되 며,\u0080 과\u007ff 사이 의 문 자 는 두 바이트 전의 문자 로 대체 되 며,기타 16 은 유 니 코드 문자 로 세 바이트 전의 문자 로 대체 된다.
encodeURIComponent:이 함수 처리 방식 은 encodeURI 와 하나의 차이 점 만 있 습 니 다.그것 은 보존 문자 에 대해 똑 같이 전의 인 코딩 을 하 는 것 입 니 다.이렇게 url 의 인자 와 값 이\#등 특수 문자 에 의 해 차단 되 지 않 습 니 다.예 를 들 면:http://localhost:8080/xss/XssServlet?username=A&T Plastic,이 url,배경 코드:

String username = request.getParameter("username");
획득 한 username 값 은 우리 가 원 하 는 A&T Plastic 이 아 닌 A 입 니 다.username=A&T Plastic 에 보존 문자&가 포함 되 어 있 고 인 코딩 이 되 지 않 았 기 때문에 username 의 값 이 차단 되 었 습 니 다.그래서 정확 한 방법 은 인 코딩:encodeURIComponent("A&T Plastic")==A%26T%20Plastic 을 한 다음 위의 연결 을 다음 과 같이 바 꾸 는 것 입 니 다.
http://localhost:8080/xss/XssServlet?username=A%26T%20Plastic,배경 에서 만 정확 한 값 을 얻 을 수 있 습 니 다:username==A&T Plastic.
username 의 값 은 uri 의 보존 문 자 를 포함 하고 있 기 때문에 인 코딩 이 필요 합 니 다.
예 를 들 어 문자':'는 전의 문자'%3A'로 대 체 됩 니 다.
위의 두 개의 서로 다른 함수 가 있 는 이 유 는 우리 가 JS 코드 를 쓸 때 URI 에 대해 두 가지 서로 다른 인 코딩 처리 수 요 를 하기 때문이다.encodeURI 는 완전한 URI 문자열 을 인 코딩 처리 하 는 데 사용 할 수 있 습 니 다.한편,encodeURIComponent 는 URI 의 일부분 을 인 코딩 하여 이 부분 에 URI 보존 문 자 를 포함 할 수 있 도록 합 니 다.이것 은 우리 의 일상 프로 그래 밍 에서 매우 유용 하 다.예 를 들 어 다음 URI 문자열:
http://www.mysite.com/send-to-friend.aspx?url=http://www.mysite.com/product.html
이 URI 문자열 에서send-to-friend.aspx 페이지 는 HTML 형식의 메 일 내용 을 만 들 고 링크 가 포함 되 어 있 습 니 다.이 링크 의 주 소 는 위의 URI 문자열 의 url 값 입 니 다.분명히 위의 url 값 은 URI 의 일부분 으로 URI 보존 키 문 자 를 포함 하고 있 습 니 다.encodeURIComponent 를 호출 하여 인 코딩 을 한 후에 사용 해 야 합 니 다.그렇지 않 으 면 위의 URI 문자열 은 브 라 우 저 에 의 해 잘못된 URI 로 여 겨 집 니 다.
정확 한 URI 는 다음 과 같 아야 합 니 다.
http://www.mysite.com/send-to-friend.aspx?url=http%3A%2F%2Fwww.mysite.com%2Fproduct.html
가장 많이 사용 되 는 것 은 encodeURIComponent 입 니 다.중국어,한국어 등 특수 문 자 를 utf-8 형식의 url 인 코딩 으로 변환 하기 때문에 배경 에 파 라 메 터 를 전달 할 때 encodeURIComponent 를 사용 해 야 할 때 배경 디 코딩 이 utf-8 지원(form 폼 의 인 코딩 방식 은 현재 페이지 인 코딩 방식 과 같 습 니 다)
     escape 인 코딩 되 지 않 은 문 자 는 69 개 입 니 다:*,+,-,.,/,@,,0-9,a-z,A-Z
     encodeURI 인 코딩 하지 않 는 문 자 는 82 개 입 니 다:!,\#,$,&,,(,),*,+,,,-,.,/,:,,=,?,@,,~,0-9,a-z,A-Z
     encodeURIComponent 인 코딩 하지 않 는 문 자 는 71 개 입 니 다:!,,(,),*,-,.,,~,0-9,a-z,A-Z
예:

alert(encodeURIComponent("A&T Plastic")); //A%26T%20Plastic
alert(escape("A&T Plastic"));  //A%26T%20Plastic
alert(encodeURI("A&T Plastic"));  //A&T%20Plastic
alert(escape("A&T Plastic "));  //A%26T%20Plastic%uFFFD%uFFFD
우 리 는 encodeURI 가 uri 를 인 코딩 하지 않 은 보존 문자&'중'이%uFFFD%uFFFD 로 인 코딩 된 것 을 보 았 습 니 다.
encodeURIComponent 에서 보류 문자&를 인 코딩 했 습 니 다.
url 인 코딩 은 XSS 공격 에서 서버 의 xss filter 를 돌아 위협 적 인 url 을 위장 하여 알 수 없 는 사용자 가 클릭 하도록 합 니 다.
따라서 get 제출 시 url 주소 의 어 지 러 운 문 제 를 처리 할 때 encodeURI 를 사용 하여 전체 url 을 인 코딩 할 수 있 습 니 다.
매개 변수 에 보존 문자 가 포함 되 어 있 으 면 인 코딩 을 해 야 한다 면 encodeURIComponent 를 사용 하여 일부 인 자 를 인 코딩 해 야 합 니 다.
encodeURIComponent 를 사용 하여 중국어 난 장 판 을 처리 하려 면 전단 에 encodeURIComponent(encodeURIComponent('안녕하세요')를 두 번 사용 하고 자바 백 엔 드 에서 사용 해 야 합 니 다.

java.Net.URLDecoder.decode(param,"UTF-8");
디 코딩 하기;
참고:
https://www.jb51.net/article/22880.htm
총결산
이상 은 이 글 의 전체 내용 입 니 다.본 논문 의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 도움 이 되 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 댓 글 을 남 겨 주 셔 서 저희 에 대한 지지 에 감 사 드 립 니 다.

좋은 웹페이지 즐겨찾기