2014-04-14 8 views
9

RFC 3986에 따라 다음 문자를 보유하고 퍼센트 부호화 그들의 소유 사용하므로보다 URI 다른에서 사용할 수 있도록해야된다 :/?#[]@!$&'()*+,;={및} (중괄호)와 같은 문자를 URL에 백분율로 인코딩해야합니까?

를 더 나아가 특별히 제한없이 일부 문자를 지정 a-zA-Z0-9\-._~

이 (오해를 방지하기 위해) 및 (읽기 쉽) 예약되지 않은 문자를 인코딩하지 일반적으로 하나가 예약 된 문자를 인코딩해야한다는 분명한 것 같지만 방법 중 하나의 카테고리에 속하지 않는 문자가 처리해야 하는가? 예를 들어 {}은 두 목록에 나타나지 않지만 표준 ASCII 문자입니다.

현대적인 브라우저를 살펴보면 때로는 다른 행동을하는 것으로 보입니다. 예를 들어, 웹 브라우저의 주소 표시 줄에 URL https://www.google.com/search?q={을 붙여 고려 :

  • 크롬 34.0.1847.116의 m가 변경되지 않습니다.
  • Firefox 28.0은 변경되지 않습니다.
  • Internet Explorer 9.0에서는 변경되지 않습니다. 한 페이스트 https://www.google.com/#q={가 (쿼리 문자열보다는 조각/해시의 문자 부분을, "검색"제거하고 #?을 변경하는 경우
  • 사파리 5.1.7은 https://www.google.com/search?q=%7B 그러나

로 변경

  • 크롬 34.0.1847.116의 m은 (
  • 파이어 폭스 28.0이 변경되지 않습니다) 자바 스크립트를 통해 https://www.google.com/#q=%7B로 변경합니다) 우리는 것을 알게됩니다.
  • Internet Explorer 9.0에서는 변경되지 않습니다. 비동기 요청을 수행하는 자바 스크립트를 사용하는 경우
  • 사파리 5.1.7은 URL이 퍼센트 아니다 (즉 this MDN example?q={의 URL을 사용하도록 수정하여), 또한 (자바 스크립트를 실행하기 전) https://www.google.com/#q=%7B

그것을 변경 - 자동으로 인코딩됩니다. (필자는 XMLHttpRequest의 API는 URL이 사전/인코딩 이스케이프 가정하기 때문에이 추측하고있다.)

내가 (기괴한 고객 요구 사항과 관련된 이유)의 파일 이름 부분에 {}을 사용하고 싶습니다 URL을 (1) 깨뜨리지 않고 이상적으로 (2) 최신 브라우저의 웹 검사기/디버거의 네트워크 패널에서 못생긴 모양의 백분율로 인코딩 된 항목을 만드는 것.

답변

3

(RFC 2396)

당신은 현명하지 못한 섹션 중 하나를 인코딩해야하며 RFC는 이유를 제공합니다."{:


계정 <>#% 주로 에 대한 RFC에서 추가 정보는 어떤 제어 문자 00-1F7F

또한 RFC에 현명로 표시 #이 URI의 fragment identifier 때문에 `

|\^[] 92,당신은 쿼리 문자열 값에있을 # 수 있도록하려는 경우는 즉, 특별한 경우입니다. 없는

일부 문자가 인코딩 할, 수락 중 하나를 인코딩 여부 등 ~ 같은

(공간) %20+

Here's a fiddle 2 일반적으로 인정 된 인코딩의 일부가 있습니다 내가 사용하고있는 테스트 케이스.

+1

흠, 내가 RFC2396을 대신하기로되어 있었기 때문에 흠, 나는 RFC3986의 대답을 기대했지만, 나는 당신의 응답에 감사드립니다. 부록 D는 문자에 대한 섹션 2가 어떤 문자를 예약했는지, 그들이 예약되었을 때, 그들이 예약 된 이유를 설명하기 위해 다시 쓰여졌다 고 말합니다. 일반 문법에 의해 구분 기호로 사용되지 않을 때에도 ... 아이러니 컬하게도 그것은 나를 모호하게 만드는 재 작성입니다. – iX3