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
给定这段代码:
<%
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
.
您始终可以使用自定义函数将空格编码为 %20
:
function URL_encode(ByVal url)
url = Server.URLEncode(url)
url = replace(url,"+","%20")
URL_encode = url
end function