Server.URLEncode 开始用加号 ("+") 代替 percent-20 ("%20")

Server.URLEncode started to replace blank with plus ("+") instead of percent-20 ("%20")

给定这段代码:

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

它输出了一会儿(比如Javascript调用encodeURI):

a%20doc%20file.asp

现在,由于未知原因,我得到:

a+doc+file%2Easp

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

经典ASP已经近20年没有更新了,所以Server.URLEncode仍然沿用RFC-1866标准,指定空格编码为+符号(这是旧 application/x-www-form-urlencoded 媒体类型的后遗症),你一定误以为它在某些时候将空格编码为 %20,除非有一个你可以更改的 IIS 设置我不知道的

更多现代语言使用 RFC-3986 编码标准 URLs,这就是为什么 Javascript 的 encodeURI 函数 returns 空格编码为 %20.

由于 RFC 向后兼容性,+%20 在任何浏览器解码时都应完全相同,但通常认为最好在编码空格时使用 %20 a URL 因为它现在是更现代的标准,并且一些解码函数(例如 Javascript 的 decodeURIComponent)不会将 + 符号识别为空格并且将无法正确解码在 %20.

上使用它们的 URL

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

function URL_encode(ByVal url)
    
    url = Server.URLEncode(url)
    url = replace(url,"+","%20")
    
    URL_encode = url
    
end function