432
2016-04-13 07:10:03
1
윗분 링크를 타고 가서 본 RFC1738 표준에 따르면 HTTP URL에 대한 규칙은 이렇습니다.
httpurl = "http://" hostport [ "/" hpath [ "?" search ]]
hpath = hsegment *[ "/" hsegment ]
hsegment = *[ uchar | ";" | ":" | "@" | "&" | "=" ]
search = *[ uchar | ";" | ":" | "@" | "&" | "=" ]
URL 중 ? 로 시작하는 부분은 <search> 부분인데 uchar (알파벳, 숫자, 기타 기호들)와 ; : @ & = 가 반복적으로 나오는 구조입니다. 한편 RFC 3986 3.4 Query (http://tools.ietf.org/html/rfc3986#section-3.4) 부분에도 쿼리 문자열에 대한 규정을 찾을 수 있습니다. 여기서는 사용할 수 있는 문자열만을 규정할 뿐 웹 폼의 형식을 규정하지는 않습니다.
웹에서 이러한 파라미터 폼, 그러니까 ? 뒤에 키=값 쌍을 &로 이어 주는 스타일의 표기법을 권장하는 쪽은 W3 입니다. (https://www.w3.org/TR/REC-html40/interact/forms.html#form-content-type)
이 권고에 의하면 앰퍼샌드(&)에 의해 키/값 쌍이 나뉘고, 키/값 쌍은 재차 등호(=)로 구분된다고 정합니다. 그치만 키/값 쌍 문자열이 공백이어서는 안된다는 제한은 없습니다. 그러므로 서버는 키/값 쌍이 등호로 구분안된다고 해서 그것을 오류라고 말할 수 없습니다. 애초에 쿼리 문자열로 적절하거든요. 단지 W3의 권고로 생각하면 애매한 폼 전달 형식이라고 볼 수 있을 뿐이죠. 참고로 PHP에서는 'http://google.com/?&a&b&c' 같은 URL에서 a, b, c, 를 모두 키로, 각각의 값은 공백으로 인식합니다. 애초에 서버는 이러한 조건에 대해 강건하게 처리되도록 구성해야 합니다.
http://www.convertforfree.com/query-string-splitter/
참고로 위 링크 같은 곳에서 제대로 해석하는지 테스트 해 보세요.