我有这样的网址 - http://www.coolsite.com/daily-plan/#id=1 解析该字符串并读取哈希值(#id= 之后的值)的最简单方法是什么?谢谢
从请求 url 获取哈希参数
在客户端(即来自 JavaScript),您可以检查window.location.hash
以获取哈希。在服务器端,一般的答案是“不可能”,因为哈希不会在请求中发送到服务器。
更新:我可能误解了这个问题。我的回答是关于如何在请求处理期间在浏览器或服务器端代码中获取 url 的哈希部分,而不是关于字符串处理。
Upd2:在这里回答评论,因为它不适合评论。
当用户点击你的导航链接时它是如何工作的?
我假设哈希已更改,并通过来自 Web 服务或 REST 的 AJAX 请求下载相应的内容。
例如,如果您的用户在其浏览器中有 URL www.example.com 并且此页面显示产品类别列表。用户单击一个类别,URL 更改为 www.example.com/#id=5,来自该类别的产品(ID=5)通过 AJAX 下载并显示在页面上。没有回发,只有部分页面刷新。
这接近你的场景吗?
现在您希望用户直接在浏览器地址栏中粘贴/输入 www.example.com/#id=5 并直接转到该类别中的产品列表。
但是/#id=5 不会通过浏览器的请求发送到服务器,因此无法在服务器端获取该值,并且您无能为力,因为浏览器决定不发送此数据而您在服务器端没有它。
在我们的项目中,当服务器仅返回公共页面代码/html,即页眉、页脚,而没有页面的主要/中心部分时,我们使用解决方案。然后有一个 JavaScript 代码,它在加载这个常见的 HTML 后立即执行。它window.location.hash
通过 AJAX获取并将其发送到 Web 服务,Web 服务返回页面主要部分的内容 (HTML)。
这是捕获锚链接的方法。适用于所有 Web 框架。
我将使用一个示例场景来说明:假设我们需要捕获未经身份验证的用户请求的深层 URL http://server.com /#/xyz,以便他们可以在登录后重定向到该深层 URL。
未经身份验证的用户请求http://server.com /#/xyz(从“#”开始的所有内容都不会发送到服务器)。
服务器只知道用户想要http://server.com/并且他们未经身份验证。服务器将用户重定向到登录表单。
这是一个聪明的地方:客户端仍在等待他们的原始请求,所以如果服务器在登录表单中包含一个隐藏元素,其中包含一些引用 window.location.href 的 JS,它可以捕获原始请求的完整 URL ,并带有锚定部分:
<form action="/login" method="post"> <div> <label>Username:</label> <input type="text" name="username"/><br/> </div> <div> <label>Password:</label> <input type="password" name="password"/> </div> <!-- XXXXXXXXX CLEVER BIT XXXXXXXXXX--> <script> document.write('<input type="hidden" name="from" value="'+document.location.href+'"/>'); </script> <!-- XXXXXXXXXX--> <div> <input class="submit-button" type="submit" value="Submit"/> </div> </form>
用户对自己进行身份验证,原始 URL 与 POST 一起发送。然后服务器可以将用户中继到原始深层 URL。
String url = " http://www.coolsite.com/daily-plan/#id=1";
int sharpPos = url.indexOf('#');
String q = null;
if (sharpPos >= 0) {
q = url.substring(sharpPos);
}
当然,您可以使用各种字符串操作方法,包括正则表达式。
但实际上你的例子很奇怪。URL 的参数通常在问号后传递。在这种情况下,您可以只使用标准类 URL:
String q = new URL(" http://www.coolsite.com/daily-plan?id=1").getQuery();
你用什么来做到这一点?
如果您使用的是 jsp 或 servlet,以下将对您有用
if (request.getParameter("#id") == null) {
out.println("Please enter your name.");
} else {
out.println("Hello <b>"+request.getParameter(i)+"</b>!");
}
如果您正在使用 javascript,以下功能将对您有用
function getURLParameters()
{
var sURL = window.document.URL.toString();
if (sURL.indexOf("?") > 0)
{
var arrParams = sURL.split("?");
var arrURLParams = arrParams[1].split("&");
var arrParamNames = new Array(arrURLParams.length);
var arrParamValues = new Array(arrURLParams.length);
var i = 0;
for (i=0;i<arrURLParams.length;i++)
{
var sParam = arrURLParams[i].split("=");
arrParamNames[i] = sParam[0];
if (sParam[1] != "")
arrParamValues[i] = unescape(sParam[1]);
else
arrParamValues[i] = "No Value";
}
for (i=0;i<arrURLParams.length;i++)
{
alert(arrParamNames[i]+" = "+ arrParamValues[i]);
}
}
else
{
alert("No parameters.");
}
}