У меня проблема, связанная с отключением IIS + в качестве пробелов в запросах.Расшифровка URL с помощью Serverside JS в ASP
У нас есть клиенты, отправляющие некоторые данные на скрытую страницу в качестве запроса (заданий), и они иногда публикуют задания с такими вещами, как C++ в них и т. Д. - поскольку они передают данные, мы не можем ожидать их правильного кодирования% 2B as они в основном нетехнологичны, и иногда они смешивают n-матч, который является забавным.
У нас также есть места, в которых у нас есть ответы на запросы (иногда до 4 при передаче имен файлов в файл флеш для ссылки на клик, затем URL-адрес перенаправления, который идет на страницу, которая регистрирует клик, а затем окончательный URL-адрес пойдите, чтобы показать клиента!).
Есть также другие места, где у нас есть URL-адреса в URL-адресах, такие как перенаправление при входе в систему и т. Д.
Плюс знаки не должны быть проблемой, но мы обнаружили несколько проблем, где они есть, поэтому я просто хочу, чтобы одна функция могла ее сортировать.
В течение времени, когда нам нужно было кодировать URL-адреса ASP (из-за того, что они не являются функцией Server.URLDecode), хотя нам в основном не нужно, поскольку страница их не кодирует, мы используем серверную часть JavaScript ASP Classic (я знаю!) функция, например
<script language="JavaScript" RUNAT="SERVER">
function URLDecode(strIN)
{
// JS will return undefined for vars that have not been set yet whereas VB doesn't so handle
if(strIN){
var strOUT = decodeURIComponent(strIN);
return strOUT;
}else{ //for undefined or nulls or empty strings just return an empty string
return "";
}
}
</script>
Однако я пытаюсь обойти возможные проблемы с + знаками с простым хаком, где я первым заменить его с заполнителем затем заменить его обратно после декодирования, например
<script language="JavaScript" RUNAT="SERVER">
function URLDecode(strIN)
{
// JS will return undefined for vars that have not been set yet whereas VB doesn't so handle
if(strIN){
strIN = strIN.replace("+","##PLUS##");
var strOUT = decodeURIComponent(strIN);
strOUT = strOUT.replace("##PLUS##","+")
return strOUT;
}else{ //for undefined or nulls or empty strings just return an empty string
return "";
}
}
</script>
Однако при запуске этого я получаю следующее ИНГ ошибка
Microsoft JScript runtime error '800a01b6'
Object doesn't support this property or method
/jobboard/scripts/VBS/EncodeFuncLib.asp, line 781
эта линия
strIN = strIN.replace("+","##PLUS##");
Я попытался
strIN = strIN.replace(/\+/g,"##PLUS##");
strIN = strIN.replace('/\+/','##PLUS##');
Но ничто не похоже на работу.
Выполнение этого кода в качестве клиентской части JavaScript работает отлично, поэтому я не знаю, почему он не работает на стороне сервера.
Я не хочу искать более 300 файлов для мест, где эта функция называется серверной, и делать замену на месте вокруг функции URLDecode, поэтому я хотел бы знать, в чем состоят проблемы и как ее решить. .является.
Сначала я подумал, что это произошло потому, что мы перешли на Windows 2012 и IIS 8, и у них появился новый JS.dll, который нужно было установить (от чтения на нем) - однако у нас все еще есть несколько серверов 2003 года в IIS 7 и у меня такая же проблема.
Если мой серверный парень не говорит мне что-то вроде версии IIS, которую мы используем в 2003 году, я не знаю, что происходит.
Может кто-нибудь пролить свет на это.
Я являюсь номером?
В чем может быть проблема?
Заранее благодарим за любую помощь.
Попробуйте проверить значение 'typeof strIn' непосредственно перед вашим оператором. Похоже, что это не строка 'string'. – Bond