2009-01-31 2 views
107

URI (특히 HTTP URL)에 하나 이상의 공백 문자가 포함될 수 있습니까? URL 으로 인코딩해야한다면 일반적으로 따르는 규칙 인 +이나 합법적 인 대안이 있습니까?공백을 포함 할 수있는 URL이 있습니까?

특히 공간이있는 URL이 인데이 인코딩되어야 함을 나타내는 RFC를 가리킬 수 있습니까?

질문에 대한 동기 부여 : 웹 사이트를 베타 테스트하는 동안 일부 URL이 공백으로 구성되어 있음을 알았습니다. 파이어 폭스는 옳은 일을하는 것처럼 보였다. 그것은 나를 놀라게했다! 그러나 개발자에게 RFC를 지적하여 URL을 수정해야 할 필요성을 느끼고 싶었습니다.

+0

다음과 같은 상위 집합 : 잘못된 문자는 모두 무엇입니까? http://stackoverflow.com/questions/1547899/which-characters-make-a-url-invalid –

+0

** 관련 항목 : ** [URL에, 공백을 % 20 또는 +?]로 인코딩해야합니까 (http://stackoverflow.com/q/1211229/1497596) – DavidRR

답변

87

RFC 1738에 따라 경찰 : 안전하지 않은

:

문자는 여러 가지 이유로 안전하지 않을 수 있습니다. 공백이 많이 남을 수 있으므로 공백 문자 문자가 안전하지 않으므로 URL을 복사하거나 이 워드 프로세서 프로그램을 처리하거나 처리 할 때 무시할 수있는 공백이 삽입 될 수 있습니다. 문자가 "<"">"은 자유 텍스트의 URL 주위에 구분 기호로 사용되기 때문에 안전하지 않습니다. 일부 시스템에서는 따옴표 (""")를 사용하여 의 URL을 구분합니다."#" 문자는 안전하지 않으므로 에 해당하는 조각/앵커 식별자에서 URL을 구분하기 위해 World Wide Web 및 다른 시스템에서 사용되므로 항상 을 인코딩해야합니다. 문자 "%"은 다른 문자의 인코딩에 사용되므로 안전하지 않습니다. 게이트웨이 및 기타 전송 에이전트가 같은 문자를 수정하는 것으로 알려져 있기 때문에 다른 문자는 안전하지 않습니다. 이러한 문자는 "{", "}", "|", "\", "^", "~", "[", "]""`" 있습니다.

안전하지 않은 문자는 항상 URL에 인코딩되어야합니다. 예에서 문자 "#"은 일반적으로 식별자를 처리하지 않는 시스템 인 경우에도 식별자를 처리해야하므로 이 사용하는 다른 시스템으로 URL을 복사하면 필요하지 않습니다 URL 인코딩을 변경하십시오.

+1

1738이 2396을 초과했습니다. http://www.ietf.org/rfc/rfc2396.txt 이것이 현재의 Uri 사양입니다. 이 경우에는 중요하지 않습니다. –

+33

그리고 2396이 3986으로 대체되었습니다. 많은 사람들이 RFC가 불변하므로이 점을 이해하지 못하므로 독자들에게 쓸모 없음을 알리지 않습니다. 힌트 : 대신 http://tools.ietf.org/html/rfc2396과 같이 http://tools.ietf.org/html/rfcnnnn을 사용하면 맨 위에 누락 된 메타 데이터가 표시됩니다. –

5

예, 일반적으로 공간은 "% 20"으로 인코딩됩니다. URL에 전달되는 매개 변수는 안전상의 이유로 인코딩해야합니다.

-3

본적이 없습니다. 아마도 당신은 그걸 받아들이도록 웹 서버를 구성 할 수 있습니다 ...

3

URL은 이 아니어야합니다.에는 공백이 있어야합니다. 주소를 지정해야하는 경우 인코딩 된 값 %20

2

Firefox 3은 주소 표시 줄에 공백으로 URL에 %20을 표시합니다.

4

질문에 답변하십시오. 애플리케이션에서 URL에 사용될 값의 공백을 대체하는 것이 일반적이라고합니다. 그 이유는 우연히 발생하는 읽기 어려운 백분율 (URI) 인코딩을 피하기 위해서입니다.

Percent-encoding에 대한 위키 백과 문서를 확인하십시오.

9

URL은 RFC 3986으로 정의되어 있지만 다른 RFC도 관련되어 있지만 RFC 1738은 더 이상 사용되지 않습니다.

다른 많은 문자와 함께 공백이 들어 있지 않을 수도 있습니다. 이러한 금지 된 문자는 종종 어떻게 든 표현되어야하기 때문에 "%"접두사가있는 ASCII 16 진수로 변환하여 URL에 인코딩하는 체계가 있습니다.

대부분의 프로그래밍 언어/플랫폼은 URL 인코딩 및 해독 기능을 제공하지만 RFC 표준을 제대로 준수하지 않을 수 있습니다. 예를 들어, PHP는 그렇지 않다는 것을 알고 있습니다.

26

짧은 답변 : 아니오, 공백을 인코딩해야합니다. +으로 공백을 인코딩하는 것이 맞지만 쿼리 문자열에만 공백을 넣으려면입니다. 경로에 %20을 사용해야합니다.

+1

안녕하세요, 나는 혼란 스럽습니다. 언젠가는 "+"하지만 언젠가는 "% 20"을 사용하는 것을 보았습니다.이 예제를 보여줄 수 있습니까? 사용자가 양식을 제출하면 양식이 공간을 어떻게 인코딩합니까? 어떤 캐릭터와? – GMsoF

+1

자세한 내용은 [이 답변] (http://stackoverflow.com/a/1211256/1497596)을 참조하십시오. – DavidRR

+0

조각/해시 부분은 어떨까요? 공간을 어떻게 인코딩해야합니까? – gumkins

40

왜 인코딩해야합니까? 요청은 다음과 같습니다.

GET /url HTTP/1.1 
(Ignoring headers) 

공백으로 구분 된 3 개의 필드가 있습니다. URL에 공백을 넣으면 :

GET /url end_url HTTP/1.1 

4 개의 입력란이 있음을 알고 있으면 잘못된 요청임을 알립니다.

GET /url%20end_url HTTP/1.1 

3 개 필드 => 유효한

참고 : 쿼리 스트링 (? 후)의 공간은 일반적으로 다소

GET /url?var=foo%20bar HTTP/1.1 
+0

var이 "foo bar"가 아닌 "foo + bar"라면? – Ivo3185

+8

A +는 % 2b – Julien

+2

으로 인코딩되어야합니다. URI 사양 자체가 아니라 전송 레이어의 요구 사항이라고 주장합니다. GET은 분명히 URL 사양이 아닌 http : 사양의 속성입니다. 마찬가지로 웹 페이지가 깨지기 때문에 URL의 따옴표를 "반드시 암호화해야합니다"라고 주장 할 수 있습니다. 그러나 이것은 URL 형식의 속성이 아닌 HTML 형식 제한의 속성입니다 (이에 대한 다른 전략이 있습니다). –

5
보다 +

GET /url?var=foo+bar HTTP/1.1 

로 부호화

누군가가 공백이있는 URL이 en이되어야 함을 나타내는 RFC를 가리킬 수 있습니까? 코딩 되었습니까? 당신이 공백 문자는 구문 법적 URL의 일부가 될 수 적이 있습니다 결국 것입니다 거기에 정의 된 문법을 보면

URI를, 따라서 URL은, 따라서, RFC 3986.

에 정의되어 있습니다 "공간이있는 URL"이라는 용어 자체는 모순입니다.

4

URL에 공백 문자가 포함될 수 있으며 대부분의 브라우저에서 % 20으로 표시되지만 브라우저 인코딩 규칙이 자주 변경되므로 브라우저에서 URL을 표시하는 방법에 의존 할 수 없습니다.

대신 URL의 공백 문자를 URL을 더 읽기 쉽고 '예쁜'이라고 생각하는 문자로 바꿀 수 있습니다.O가 선호하는 일반 문자는 "-", "_", "+".... 그러나 이것들은 강요가 아니므로 URL에 이미 포함되어 있지 않은 문자를 사용할 수 있습니다.

특정 브라우저 및 플랫폼에서 오류가 발생할 수 있으므로 URL 공간 문자 교체로 %, &,}, {,], [, /,>, <]을 사용하지 마십시오.

Stak 오버 플로우 자체는 스페이스 (% 20) 대체로 '-'문자를 사용합니다.

행복한 질문이 있으십니까?

관련 문제