我有以下代码:
<%@Language="VBSCRIPT"%>
<html>
<head>
<title>in/Test Page 2</title>
</head>
<body>
<%
response.write "Request.QueryString = """ & Request.QueryString & """<br />"
for each item in request.QueryString
response.write (item + " = " + Request.QueryString(item) + "<br>")
next
%>
</body>
</html>
当我用这个网址调用它时:
TestPage2.asp?id=1&turl=http://www.google.com?id=1&url=generic#index
产生这个输出
Request.QueryString = "id=1&turl=http://www.google.com?id=1&url=generic"
id = 1
turl = http://www.google.com?id=1url=generic
如何获取原始网址中 # 字符后面的位?我已经查看了 Request.Servervariable 的全部内容。
简短回答:你不能
这是设计使然。
来自 RFC 2396:统一资源标识符 (URI):通用语法 - 第 4.1 节片段标识符
当 URI 引用用于对所识别的资源执行检索操作时,可选片段标识符(通过剖面线(“#”)字符与 URI 分隔)包含附加引用信息,该信息将在检索后由用户代理解释。检索操作已成功完成。因此,它不是 URI 的一部分,但经常与 URI 结合使用。
基本上,
#
永远不会发送到服务器,因此您无法从经典 ASP 中检索它。客户端 (互联网浏览器) 在发送 URI 之前从 URI 中删除 #
片段。
话虽如此,可以使用 JavaScript 从客户端检索它,然后通过表单/查询字符串将值传递到经典 ASP 可以检索和使用它的服务器。
但是,如果您控制 URL,最简单的解决方案是使用 URL 编码将交叉线 (
#
) 编码为查询字符串值的一部分。这样做将对交叉影线 %23
而不是 #
进行编码,导致互联网浏览器不将其视为片段标识符。