[javascript] 이스케이프 된 URL 매개 변수 가져 오기

URL 매개 변수를 가져올 수 있고 JavaScript 오류 “malformed URI sequence”를 출력하지 않고이 검색 문자열을 지원하는 jQuery 플러그인을 찾고 있습니다. 이를 지원하는 jQuery 플러그인이 없으면이를 지원하도록 수정하는 방법을 알아야합니다.

?search=%E6%F8%E5

디코딩 될 때 URL 매개 변수의 값은 다음과 같아야합니다.

æøå

(문자는 노르웨이어입니다).

서버에 액세스 할 수 없으므로 서버에서 아무것도 수정할 수 없습니다.



답변

function getURLParameter(name) {
    return decodeURI(
        (RegExp(name + '=' + '(.+?)(&|$)').exec(location.search)||[,null])[1]
    );
}


답변

아래는 내가 언급하지 않은 버그 수정 (예 : 실제로 null을 반환하고 ‘null’이 아닌)을 수정하는 것입니다.

function getURLParameter(name) {
    return decodeURIComponent((new RegExp('[?|&]' + name + '=' + '([^&;]+?)(&|#|;|$)').exec(location.search)||[,""])[1].replace(/\+/g, '%20'))||null;
}


답변

정말로 원하는 것은 jQuery URL Parser plugin 입니다. 이 플러그인을 사용하면 특정 URL 매개 변수 (현재 URL에 대한) 값을 얻는 방법은 다음과 같습니다.

$.url().param('foo');

매개 변수 이름을 키로 사용하고 매개 변수 값을 값으로 사용하는 객체를 원하는 경우 다음 param()과 같이 인수없이 호출 하면됩니다.

$.url().param();

이 라이브러리는 현재 URL뿐만 아니라 다른 URL 과도 작동합니다.

$.url('http://allmarkedup.com?sky=blue&grass=green').param();
$('#myElement').url().param(); // works with elements that have 'src', 'href' or 'action' attributes

이것은 전체 URL 구문 분석 라이브러리이므로 지정된 포트 또는 경로, 프로토콜 등과 같은 URL에서 다른 정보를 얻을 수도 있습니다.

var url = $.url('http://allmarkedup.com/folder/dir/index.html?item=value');
url.attr('protocol'); // returns 'http'
url.attr('path'); // returns '/folder/dir/index.html'

다른 기능도 있습니다 . 더 많은 문서와 예제 는 홈페이지 를 확인하십시오 .

대신이 특정 목적을 위해 자신의 URI 파서 쓰는 작동 대부분의 경우를 실제 URI 파서를 사용합니다. 답변에 따라 다른 답변의 코드는 'null'대신 대신 반환 할 수 null있으며 빈 매개 변수 ( ?foo=&bar=x) 로는 작동하지 않으며 한 번에 모든 매개 변수를 구문 분석하고 반환 할 수 없으며 매개 변수에 대한 URL을 반복적으로 쿼리하면 작업을 반복합니다.

실제 URI 파서를 사용하십시오.

jQuery를 싫어하는 사람들에게는 순수한 JS 플러그인 버전이 있습니다.


답변

URL 매개 변수가 무엇인지 모르고 매개 변수에있는 키와 값이있는 오브젝트를 얻으려면 다음을 사용할 수 있습니다.

function getParameters() {
  var searchString = window.location.search.substring(1),
      params = searchString.split("&"),
      hash = {};

  if (searchString == "") return {};
  for (var i = 0; i < params.length; i++) {
    var val = params[i].split("=");
    hash[unescape(val[0])] = unescape(val[1]);
  }
  return hash;
}

URL과 함께 getParameters ()를 호출하면 다음과 같이 /posts?date=9/10/11&author=nilbus반환됩니다.

{
  date:   '9/10/11',
  author: 'nilbus'
}

질문과는 거리가 멀기 때문에 여기에 코드를 포함 시키지는 않지만 weareon.net은 URL의 매개 변수를 조작 할 수있는 라이브러리를 게시했습니다.


답변

브라우저 기본 위치를 사용할 수 있습니다 .

function getParameter(paramName) {
  var searchString = window.location.search.substring(1),
      i, val, params = searchString.split("&");

  for (i=0;i<params.length;i++) {
    val = params[i].split("=");
    if (val[0] == paramName) {
      return unescape(val[1]);
    }
  }
  return null;
}

그러나 당신을 도울 수있는 몇 가지 jQuery 플러그인이 있습니다.


답변

999의 답변을 바탕으로 :

function getURLParameter(name) {
    return decodeURIComponent(
        (location.search.match(RegExp("[?|&]"+name+'=(.+?)(&|$)'))||[,null])[1]
    );
}

변경 사항 :

  • decodeURI() 로 대체 decodeURIComponent()
  • [?|&] 정규 표현식의 시작 부분에 추가됩니다

답변

대소 문자를 구분하지 않으려면 i 매개 변수를 추가해야합니다.

  function getURLParameter(name) {
    return decodeURIComponent(
      (RegExp(name + '=' + '(.+?)(&|$)', 'i').exec(location.search) || [, ""])[1]
    );
  }