У меня такой url - http://www.coolsite.com/daily-plan/#id=1 Самый простой способ проанализировать эту строку и прочитать хэш-значение (значение после # id =)? Спасибо вам
Получение параметров хеширования из запроса URL
Ответ 1
На стороне клиента (т.е. из JavaScript) вы можете проверить window.location.hash
, чтобы получить хэш. На стороне сервера общий ответ "невозможно", поскольку хеш не отправляется в запрос на сервер.
Обновление: Возможно, я неправильно понял вопрос. Мой ответ о том, как получить хэш-часть URL-адреса в браузере или на стороне сервера во время обработки запроса, а не о обработке строк.
Upd2: Отвечайте на комментарий здесь, потому что он не соответствует комментариям.
Как это работает, когда пользователь нажимает на ваши навигационные ссылки?
Я предполагаю, что hash изменен, и соответствующий контент загружается через запрос AJAX из веб-службы или REST.
Например, если ваш пользователь имеет URL www.example.com в своем браузере, и на этой странице отображается список категорий продуктов. Пользователь нажимает одну категорию и URL-адрес на www.example.com/#id=5, а продукты из этой категории (с идентификатором = 5) загружаются через AJAX и отображаются на странице. Нет обратной передачи, только частичное обновление страницы.
Это близко к вашему сценарию?
Теперь вы хотите, чтобы пользователь вставлял/вводил www.example.com/#id=5 непосредственно в адресную строку браузера и перешел непосредственно к списку продуктов этой категории.
Но /# id = 5 не отправляется на сервер с запросом браузером, поэтому нет способа получить это значение на стороне сервера, и вы ничего не можете с этим сделать, поскольку это браузер решил не отправлять эти данные, и у вас его нет на стороне сервера.
В нашем проекте мы используем решение, когда сервер возвращает только общий код страницы /html, т.е. заголовок, нижний колонтитул, без основной/центральной части страницы. Затем есть код JavaScript, который выполняется сразу после загрузки этого обычного HTML-кода. Он принимает window.location.hash
и отправляет его на веб-службу через AJAX, а веб-служба возвращает контент (HTML) для основной части страницы.
Ответ 2
new URI("http://.../abc#xyz").getFragment();
См. Javadocs для URI
Ответ 3
Замените '#' на "?" при анализе URL-адреса. Проверьте код ниже
String url = "http://www.coolsite.com/daily-plan/#id=1";
String urlNew = url.replace("#", "?");
String id = Uri.parse(urlNew).getQueryParameter("id");
Ответ 4
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();
Ответ 5
что вы используете для этого?
Если вы используете 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.");
}
}
Ответ 6
Вот как фиксировать привязные ссылки. Работает во всех веб-фреймворках.
Я буду использовать примерный сценарий, чтобы проиллюстрировать: пусть нам нужно зафиксировать глубокий URL http://server.com /#/xyz, запрошенный неавторизованным пользователем, чтобы они могли быть перенаправлены на этот глубокий URL-адрес после входа.
-
Неаутентифицированные пользовательские запросы http://server.com /#/xyz (все, начиная с '#' он не отправляется на сервер).
-
Весь сервер знает, что пользователь хочет http://server.com/ и что они не аутентифицированы. Сервер перенаправляет пользователя в форму входа.
-
Здесь умный бит: клиент все еще ждет своего первоначального запроса, поэтому, если сервер содержит скрытый элемент в форме входа с некоторым JS, который ссылается на window.location.href, он может захватить полный 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-адрес.
Ответ 7
Если ваш URL-адрес будет таким же, как вы пишете, и не содержит anythins else, тогда ваш код на Java поможет вам
String val = "http://www.coolsite.com/daily-plan/#id=1";
System.out.println(val.split("#id")[1]);
Не забудьте проверить на нулевое значение.
P.S. Если вы используете сервлет, вы можете получить этот параметр из request.getAttribute( "id" ).
С наилучшими пожеланиями, Psycho