Server.URLEncode开始用加号(“ +”)代替百分号20(“%20”)的空白

时间:2019-06-18 14:07:23

标签: vbscript asp-classic urlencode

给出这段代码:

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

它会输出一段时间(例如Javascript调用encodeURI):

a%20doc%20file.asp

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

a+doc+file%2Easp

我不确定为实现此目的需要做些什么(也许文件内容编码为ANSI / UTF-8)。为什么会发生这种情况?如何获得Server.URLEncode的第一个行为,即使用百分比编码?

1 个答案:

答案 0 :(得分:2)

经典ASP已有近20年没有更新,因此Server.URLEncode仍使用RFC-1866标准,该标准指定将空格编码为+符号(这是对旧的application/x-www-form-urlencoded媒体类型),您一定会误以为它在某个时候将空格编码为%20,除非您有一个我不知道的可以更改的IIS设置,否则不会。

更多现代语言使用RFC-3986标准对URL进行编码,这就是Javascript encodeURI函数返回编码为%20的空格的原因。

+%20在任何浏览器中都应完全相同地对待,这要归功于RFC向后兼容,但是通常认为在对URL中的空格进行编码时最好使用%20由于它是当今更新的标准,因此某些解码功能(例如Javascript的decodeURIComponent)无法将+个符号识别为空格,并且无法正确解码在%20上使用它们的URL

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

function URL_encode(ByVal url)

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

    URL_encode = url

end function