Обратите, однако, внимание, что хотя неэкранированные < нельзя вставлять в разметку HTML ответа, тем не менее, их вполне допустимо включать в адреса URL, используемые для получения ответа. На самом деле для HTML и URL определены совершенно различные специальные символы. Например, символ & в разметке HTML необходимо преобразовывать в &, но для представления символа & в адресе URL должна использоваться совсем другая схема кодирования (там этот символ обычно разделяет параметры). Для передачи сценарию названия языка, такого как a&b, нужно ввести такой адрес URL:
http://localhost/cgi—bin/languages2reply.py?language=a%26b
Здесь %26 представляет символ &, то есть символ & заменяется комбинацией символа % с шестнадцатеричным значением (0x26) & в кодировке ASCII (38). Аналогично, как уже отмечалось в конце главы 13, чтобы передать название языка C++ в виде параметра запроса, символ + необходимо заменить экранированной последовательностью %2b:
http://localhost/cgi—bin/languages2reply.py?language=C%2b%2b
Передача названия C++ в неэкранированном виде не даст желаемого результата, потому что символ + в строках URL имеет специальное значение — он представляет пробел. По стандартам URL большинство не алфавитно-цифровых символов должно преобразовываться в такие экранированные последовательности, а пробелы — замещаться символами +. Это соглашение известно как формат строки запроса application/ x-www-form-url encoded, и оно стоит за теми странными адресами URL, которые вы можете часто видеть в адресной строке броузера, путешествуя в Веб.
Использованная литература:
Марк Лутц — Программирование на Python, 4-е издание, II том, 2011