Server.URLEncode 开始用加号 ("+") 而不是百分比 20 ("%20") 替换空白

Ame*_*hel 1 vbscript urlencode asp-classic

鉴于这段代码:

<%
    Response.Write Server.URLEncode("a doc file.asp")
%>
Run Code Online (Sandbox Code Playgroud)

它输出一段时间(如 Javascript call encodeURI):

a%20doc%20file.asp
Run Code Online (Sandbox Code Playgroud)

现在,不知为何,我得到:

a+doc+file%2Easp
Run Code Online (Sandbox Code Playgroud)

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

Ada*_*dam 5

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

更多现代语言使用RFC-3986标准对 URL 进行编码,这就是 JavascriptencodeURI函数返回编码为%20.

双方+%20在任何浏览器感谢RFC向后兼容解码应被视为完全一样的,但它通常被认为是最好用%20的URL编码的空间时,因为它是更现代的标准,现在,一些解码功能(如JavaScript的decodeURIComponent)韩元+不能将符号识别为空格,并且无法正确解码使用它们的 URL %20

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

function URL_encode(ByVal url)

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

    URL_encode = url

end function
Run Code Online (Sandbox Code Playgroud)

  • 我认为这确实是一个错误。谢谢您的回答。 (2认同)