给出这段代码:
<%
Response.Write Server.URLEncode("a doc file.asp")
%>
它会输出一段时间(例如Javascript调用encodeURI
):
a%20doc%20file.asp
现在,由于未知原因,我得到:
a+doc+file%2Easp
我不确定为实现此目的需要做些什么(也许文件内容编码为ANSI / UTF-8)。为什么会发生这种情况?如何获得Server.URLEncode
的第一个行为,即使用百分比编码?
答案 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