我怎样才能获得完整的网址,包括#字符后面的字符在/测试页 2

问题描述 投票:0回答:1

我有以下代码:

<%@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 的全部内容。

asp-classic
1个回答
3
投票

简短回答:你不能


这是设计使然。

来自 RFC 2396:统一资源标识符 (URI):通用语法 - 第 4.1 节片段标识符
当 URI 引用用于对所识别的资源执行检索操作时,可选片段标识符(通过剖面线(“#”)字符与 URI 分隔)包含附加引用信息,该信息将在检索后由用户代理解释。检索操作已成功完成。因此,它不是 URI 的一部分,但经常与 URI 结合使用。

基本上,

#
永远不会发送到服务器,因此您无法从经典 ASP 中检索它。客户端 (互联网浏览器) 在发送 URI 之前从 URI 中删除
#
片段。

话虽如此,可以使用 JavaScript 从客户端检索它,然后通过表单/查询字符串将值传递到经典 ASP 可以检索和使用它的服务器。

但是,如果您控制 URL,最简单的解决方案是使用 URL 编码将交叉线 (

#
) 编码为查询字符串值的一部分。这样做将对交叉影线
%23
而不是
#
进行编码,导致互联网浏览器不将其视为片段标识符。

© www.soinside.com 2019 - 2024. All rights reserved.