Просмотр полной версии : Кодирование URL параметров, как правильно интерпретировать плюс?
Я тут с пеной у рта распинаюсь доказывая, что + - валидный символ в параметрах (том, что следует за "?" в URL), а мне люди пишущие на Питоне так же с пеной у рта доказывают, что "+" в параметрах нужно интерпретировать как пробел.
Я перечитал все RFC которые смог найти, доступную документацию и... не могу прийти к однозначному мнению...
Если окажется, что я не прав, то это баг URLVariables, если я прав, то это значит писать очердной костыль...
rainbowrussia
19.01.2011, 22:04
Исторически сложилось, что плюс в URL заменяет пробел.
То есть script.pl?var=1+2 означает передачу параметра var со значением "1 2".
Вроде так. А чтобы передать "1+2" нужно написать script.pl?var=1%2B2
ps_spectre
19.01.2011, 22:06
ага, и википедия об этом говорит
Query_string (http://en.wikipedia.org/wiki/Query_string)
* Letters (A-Z and a-z), numbers (0-9) and the characters '.','-','~' and '_' are left as-is
* SPACE is encoded as '+'
* All other characters are encoded as %FF hex representation with any non-ASCII characters first encoded as UTF-8 (or other specified encoding)
вот тут написано rfc3986#page-12 (http://tools.ietf.org/html/rfc3986#page-12)
reserved = gen-delims / sub-delims
gen-delims = ":" / "/" / "?" / "#" / "[" / "]" / "@"
sub-delims = "!" / "$" / "&" / "'" / "(" / ")"
/ "*" / "+" / "," / ";" / "="
unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~"
Все не так просто: http://bytes.com/topic/php/answers/5624-urlencode-vs-rawurlencode
вот тут есть дискуссия еще по этому поводу. А дальше еще и вот это: http://lists.w3.org/Archives/Public/uri/2002May/0032.html
И как бы я не могу найти, какое было постановление в итоге :)
Да и URLVariables согласен принимать плюсы в качестве пробелов, но никогда так не выводит параметры.
Да, еще такой непрозрачный момент:
var variables:URLVariables = new URLVariables("a=1+2");
variables.b = "1+2";
дадут в итоге разный результат. Было немного непредсказуемо для меня...
rainbowrussia
19.01.2011, 22:39
На сколько я понял, использование плюса для обозначения пробелам это дань истории, и не входит в официальную спецификацию. По-этому "+" и "%20" преобразуются в пробел, а обратное преобразование - в меру желания следовать rfc.
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.