Мой веб-хостинг отказался помочь мне с этим, поэтому я прихожу к мудрым людям за помощью "отладки черного ящика". Вот отредактированная версия того, что я им отправил:
У меня есть два (среди прочих) домена на Dreamhost:
1) thefigtrees.net
2) shouldivoteformccain.com
Сегодня я заметил, что когда я размещаю CGI-скрипт на # 1, к тому времени
Сценарий CGI выполняется, строка запроса HTTP GET передается ему как QUERY_STRING
Переменная окружения уже была декодирована URL. Это проблема, потому что
это означает, что стандартная библиотека CGI (например, CGI.pm в Perl) попытается
разделить на амперсанды, а затем декодировать саму строку. Есть два
потенциальные проблемы с этим:
1) строка дважды декодируется, поэтому, если значение передается в сценарий
например, «% 2525», он будет обрабатываться как просто «%» (декодируется дважды)
а не "% 25" (декодируется один раз)
2) (чаще) если в представленном значении есть амперсанд, то он
будет (должным образом) отправлен как% 26, но будет окружение QUERY_STRING. переменная воля
если он уже декодирован в «&», и библиотека CGI будет неправильно
разделить строку запроса в этом амперсанде. Это большая проблема!
Сценарий на http://thefigtrees.net/test.cgi демонстрирует это. Это перекликается с
переменные окружения это называется с. Навигация в браузере:
http://thefigtrees.net/lee/test.cgi?x=y%26z
Вы видите, что REQUEST_URI правильно содержит x = y% 26z (без кодирования), но это
QUERY_STRING уже декодировал его в x = y & z.
Если я повторю тест на домене № 2 (
http://www.shouldivoteformccain.com/test.cgi?x=y%26z) Я вижу, что
QUERY_STRING остается не закодированным, поэтому CGI.pm затем разделяется и декодируется
правильно.
Я попытался отключить мои файлы .htaccess на обоих, чтобы убедиться, что это не
проблема, и не видел никакой разницы.
Может ли кто-нибудь предположить возможные причины этого, поскольку мой веб-хостинг, похоже, не желает мне помочь?
спасибо,
Lee