У нас проблема с конкретным сервером. Все знаки плюса, размещенные в приложении, заменяются пробелами - в POST и GET и на всех страницах этого сайта.
В качестве тестового примера у меня есть маленькая страница (это сервер ASP):
<html>
<body>
<form method="post">
<input type="text" name="Plus" id="Plus" />
<input type="submit" />
</form>
Previous Value: <%= request("Plus") %><br />
Query String: <%= request.querystring %>
</body>
</html>
На любом другом сервере это работает хорошо, но на одном сервере плюсы заменяются пробелами.
Пример: для ввода "1 2+3
" - запрос ("Плюс") равен "1 2 3
", а строка запроса - "1+2+3
". Не хорошо. Другие символы, похоже, правильно декодируют.
Следует сказать, что кто-то пытался «защитить» этот сервер от атак, поэтому могут быть включены непонятные параметры IIS (хотя мы и удалили фильтр ISAPI).
Спасибо.
UPDATE:
Оказывается, установлен еще один фильтр, SQL-фильтр ISAPIClipSQLInjection.dll от http://www.codeplex.com/IIS6SQLInjection.
Фильтр содержит ошибки - он заменяет действительные символы из POST и GET:
- Знаки плюс заменяются пробелами: «1% 2B2» -> «1 + 2», так же, как «1 2»
- Точки с запятой заменяются запятыми: "привет"; -> «Привет»
Более новая версия фильтра (2.0b) не исправляет это, но позволяет исключить определенные страницы. Поскольку он установлен в производство, мы решили не удалять фильтр, мы использовали javascript, чтобы изменить все плюсы на "+ "
(с пробелом, а не точкой с запятой).
Не оптимальное решение, но это то, что хотел начальник.