Подтвердить что ты не робот

Получение параметров хеширования из запроса URL

У меня такой url - http://www.coolsite.com/daily-plan/#id=1 Самый простой способ проанализировать эту строку и прочитать хэш-значение (значение после # id =)? Спасибо вам

4b9b3361

Ответ 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) для основной части страницы.

Ответ 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