0

У меня проблема, связанная с отключением 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 году, я не знаю, что происходит.

Может кто-нибудь пролить свет на это.

Я являюсь номером?

В чем может быть проблема?

Заранее благодарим за любую помощь.

+1

Попробуйте проверить значение 'typeof strIn' непосредственно перед вашим оператором. Похоже, что это не строка 'string'. – Bond

ответ

0

Регулярное выражение для замены знаков плюс равно strIN = strIN.replace(/\+/g,"##PLUS##"); Так как + имеет значение в регулярном выражении, его необходимо экранировать с помощью обратного слэша.

+0

На самом деле я нахожу strIN = strIN.replace ('/ \ + /', '## PLUS ##'); в сообщение, но по какой-то причине он должен был вырезать \ перед +. Во всяком случае, я просто попробовал еще раз, и он все еще не работает PLUS, нет причины strIN = strIN.replace («+», «## PLUS ##»); не должно работать. благодаря – MonkeyMagix

Смежные вопросы