Server.URLEncode начал заменять пустое с плюса ("+") вместо процента-20 ("% 20") - PullRequest
0 голосов
/ 18 июня 2019

Учитывая этот кусок кода:

<%
    Response.Write Server.URLEncode("a doc file.asp")
%>

Это выводит это на некоторое время (как вызов Javascript encodeURI):

a%20doc%20file.asp

Теперь, по неизвестной причине, я получаю:

a+doc+file%2Easp

Я не уверен в том, что я коснулся, чтобы это произошло (возможно, кодировка содержимого файла ANSI / UTF-8).Почему это произошло и как я могу получить первое поведение Server.URLEncode, то есть используя кодировку процентов?

1 Ответ

2 голосов
/ 18 июня 2019

Классический ASP не обновлялся в течение почти 20 лет, поэтому Server.URLEncode по-прежнему использует стандарт RFC-1866 , в котором пробелы кодируются в виде символов + (что представляет собой похмелье отстарый application/x-www-form-urlencoded тип носителя), вы должны ошибаться, полагая, что в какой-то момент он кодировал пробелы как %20, если только вы не можете изменить настройку IIS, о которой я не знаю.

Более современныйязыки используют стандарт RFC-3986 для кодирования URL, поэтому функция Javascript encodeURI возвращает пробелы, закодированные как %20.

Обе + и %20 должны обрабатыватьсяточно так же, когда декодируется любым браузером благодаря обратной совместимости RFC, но обычно считается, что лучше использовать %20 при кодировании пробелов в URL, так как это более современный стандарт сейчас, и некоторые функции декодирования (такие как Javascript decodeURIComponent)не распознает символы + как пробелы и не сможет правильно декодировать URL-адреса, использующие их более %20.

Вы всегда можете использовать пользовательскую функциюион для кодирования пробелов как %20:

function URL_encode(ByVal url)

    url = Server.URLEncode(url)
    url = replace(url,"+","%20")

    URL_encode = url

end function
...