Vbscript Server.URLEncode开始将空格替换为加号(“+”),而不是百分比-20(“%20”)

Vbscript Server.URLEncode开始将空格替换为加号(“+”),而不是百分比-20(“%20”),vbscript,asp-classic,urlencode,Vbscript,Asp Classic,Urlencode,鉴于这段代码: <% Response.Write Server.URLEncode("a doc file.asp") %> 现在,由于未知的原因,我得到: a+doc+file%2Easp 我不确定是什么让这种情况发生的,可能是文件内容编码ANSI/UTF-8。为什么会发生这种情况?我如何获得Server.URLEncode的第一个行为,即使用百分比编码?经典ASP近20年没有更新,因此Server.URLEncode仍然使用标准,该标准指定空间编码为+符号,这是旧应

鉴于这段代码:

<%
    Response.Write Server.URLEncode("a doc file.asp")
%>
现在,由于未知的原因,我得到:

a+doc+file%2Easp

我不确定是什么让这种情况发生的,可能是文件内容编码ANSI/UTF-8。为什么会发生这种情况?我如何获得Server.URLEncode的第一个行为,即使用百分比编码?

经典ASP近20年没有更新,因此Server.URLEncode仍然使用标准,该标准指定空间编码为+符号,这是旧应用程序/x-www-form-urlencoded媒体类型的遗留问题,您一定错了,认为它在某种程度上将空间编码为%20,除非有一个IIS设置您可以更改,而我不知道

更现代的语言使用标准来编码URL,这就是Javascript的encodeURI函数返回编码为%20的空格的原因

由于RFC向后兼容性,在任何浏览器解码时,+和%20都应该被完全相同地对待,但通常认为在URL中对空格进行编码时最好使用%20,因为它现在是更现代的标准,一些解码功能,比如Javascript的decodeURIComponent,无法将+符号识别为空格,并且无法正确解码使用它们超过%20的URL

您始终可以使用自定义函数将空间编码为%20:


经典ASP已经有近20年没有更新了,因此Server.URLEncode仍然使用该标准,该标准将空格编码为+符号,这是旧应用程序的遗留问题/x-www-form-urlencoded媒体类型,您一定误以为它在某个时候将空格编码为%20,除非有一个我不知道的IIS设置你可以更改

更现代的语言使用标准来编码URL,这就是Javascript的encodeURI函数返回编码为%20的空格的原因

由于RFC向后兼容性,在任何浏览器解码时,+和%20都应该被完全相同地对待,但通常认为在URL中对空格进行编码时最好使用%20,因为它现在是更现代的标准,一些解码功能,比如Javascript的decodeURIComponent,无法将+符号识别为空格,并且无法正确解码使用它们超过%20的URL

您始终可以使用自定义函数将空间编码为%20:


我认为这确实是一个错误。谢谢你的回答。我想我最后遇到了一个关于.NET组件的问题。我使用了Web.HttpUtility.urlencode而不是Uri.EscapeUriString,这是针对本例的。我认为这确实是一个错误。谢谢你的回答。我想我最后遇到了一个关于.NET组件的问题。我使用了Web.HttpUtility.urlencode而不是Uri.EscapeUriString,这是用于本例的。
a+doc+file%2Easp
function URL_encode(ByVal url)

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

    URL_encode = url

end function