Jak uzyskać parametr URL za pomocą jQuery lub zwykłego JavaScript?


617

Widziałem wiele przykładów jQuery, w których rozmiar i nazwa parametru są nieznane.

Mój adres URL będzie miał zawsze tylko 1 ciąg:

http://example.com?sent=yes

Chcę tylko wykryć:

  1. Czy sentistnieje
  2. Czy to jest równe „tak”?




Najlepsze rozwiązanie, jakie kiedykolwiek widziałem [tutaj] [1] [1]: stackoverflow.com/a/901144/3106590
— hmfarimani

1
Jest teraz do tego wtyczka / biblioteka o nazwie URI.js: github.com/medialize/URI.js
— alexw

Odpowiedzi:


1211

Najlepsze rozwiązanie tutaj .

var getUrlParameter = function getUrlParameter(sParam) {
    var sPageURL = window.location.search.substring(1),
        sURLVariables = sPageURL.split('&'),
        sParameterName,
        i;

    for (i = 0; i < sURLVariables.length; i++) {
        sParameterName = sURLVariables[i].split('=');

        if (sParameterName[0] === sParam) {
            return sParameterName[1] === undefined ? true : decodeURIComponent(sParameterName[1]);
        }
    }
};

A to w jaki sposób można korzystać z tej funkcji, zakładając, że adres URL jest
http://dummy.com/?technology=jquery&blog=jquerybyexample.

var tech = getUrlParameter('technology');
var blog = getUrlParameter('blog');

8
Dzięki! Ale podczas kopiowania znalazłem nieprzyjemną niespodziankę, polegającą na tym, że biała spacja o zerowej szerokości (\ u200b) jest tam pod koniec. Wykonanie skryptu ma niewidoczny błąd składniowy.
— Christofer Ohlsson,

11
Zwróć a falselub nullpuste wyszukiwanie
— Stefano Caravana

4
To rozwiązanie działa całkiem dobrze dla mnie Właśnie użyłem var sPageURL = decodeURI (window.location.search.substring (1)); aby przekonwertować% 20 znaków na białe spacje, a także zwracam pusty ciąg zamiast niczego, jeśli parametr nie jest dopasowany.
— Christophe

18
Zaktualizowałem odpowiedź, aby uwzględnić wszystkie zmiany kodu komentarzy powyżej tego komentarza.
— Rob Evans

7
Dekodowanie należy wykonać na wartości parametru (jak sugeruje Iouri). Jeśli dekodowanie odbywa się na adresie URL (jak w odpowiedzi), nie będzie działać poprawnie, jeśli jest zakodowany &lub =ma wartość parametru.
— zakinster,

286

Rozwiązanie od 2020 roku

Mamy: http://example.com?sent=yes

let searchParams = new URLSearchParams(window.location.search)

Czy wysłał opuszczeniu w ?

searchParams.has('sent') // true

Czy to jest równe „tak”?

let param = searchParams.get('sent')

a następnie po prostu porównaj.


16
myślę, że nie jest to obsługiwane w różnych przeglądarkach, więc dlaczego warto z niego korzystać? referencja - developer.mozilla.org/en-US/docs/Web/API/URLSearchParams
— p_champ

1
@p_champ masz rację. Ale możesz użyć polyfill do URLSearchParams
— Optio

2
obecnie nie działa w IE / Edge, więc wykrywaj funkcje: if ('URLSearchParams' in window) { // Browser supports URLSearchParams} Zobacz tutaj
— mfgmicha 10.01.2018

4
Wystarczająco dobre dla mnie i moich zamierzonych odbiorców. caniuse.com/#feat=urlsearchparams
— jontsai

4
@p_champ Edge otrzymał wsparcie w wersji 17 (kwiecień 2018). Niech IE umrze.
— Ryan DuVal

198

Fragment kodu jQuery, aby uzyskać dynamiczne zmienne przechowywane w adresie URL jako parametry i przechowywać je jako zmienne JavaScript gotowe do użycia ze skryptami:

$.urlParam = function(name){
    var results = new RegExp('[\?&]' + name + '=([^&#]*)').exec(window.location.href);
    if (results==null) {
       return null;
    }
    return decodeURI(results[1]) || 0;
}

example.com?param1=name¶m2=&id=6

$.urlParam('param1'); // name
$.urlParam('id');        // 6
$.urlParam('param2');   // null

przykładowe parametry ze spacjami

http://www.jquery4u.com?city=Gold Coast
console.log($.urlParam('city'));  
//output: Gold%20Coast



console.log(decodeURIComponent($.urlParam('city'))); 
//output: Gold Coast

12
Uwaga: Musisz zdekodować w przypadku, gdy istnieją znaki specjalne jako parametr lub Umlaute itp. Więc zamiast return results[1] || 0;tego powinno byćreturn decodeURI(results[1]) || 0;
— Kai Noack

Ciekawe, dlaczego potrzebuje tej || 0części, skoro już jest sprawdzanie wyniku, czy nie zawsze zwróci tablicę dopasowania?
— AirWick219

@ AirWick219 odpowiednie zabezpieczenie przed awarią. choć zbędne, nigdy nie boli być ostrożnym
— zanderwar

2
Oto najprawdopodobniej oryginalne źródło: sitepoint.com/url-parameters-jquery, ale do tej odpowiedzi dodano kilka nowych pomysłów
— bgmCoder

1
Nie jestem pewien, czy warto do tego użyć jQuery.
— Quentin 2

88

Zawsze trzymam to jako jedną linię. Teraz params ma zmienne:

params={};location.search.replace(/[?&]+([^=&]+)=([^&]*)/gi,function(s,k,v){params[k]=v})

wielowarstwowy:

var params={};
window.location.search
  .replace(/[?&]+([^=&]+)=([^&]*)/gi, function(str,key,value) {
    params[key] = value;
  }
);

jako funkcja

function getSearchParams(k){
 var p={};
 location.search.replace(/[?&]+([^=&]+)=([^&]*)/gi,function(s,k,v){p[k]=v})
 return k?p[k]:p;
}

którego możesz użyć jako:

getSearchParams()  //returns {key1:val1, key2:val2}

lub

getSearchParams("key1")  //returns val1

Brzydki hack, który modyfikuje ciąg wyszukiwania ... ale nie wymaga zewnętrznych modułów ani jquery. Lubię to.
— Bryce

4
@Bryce W rzeczywistości nie modyfikuje wyszukiwanego ciągu. .replace faktycznie zwraca nowy ciąg, a te zwrócone ciągi są przetwarzane w obiekt params.
— AwokeKnowing

Ładne, krótkie i, w przeciwieństwie do przyjętego rozwiązania, nie musi ponownie sprawdzać adresu URL za każdym razem, gdy potrzebujesz wartości. Można go nieco ulepszyć, replace(/[?&;]+([^=]+)=([^&;]*)/giaby ponownie skonfigurować „;” znak jako separator.
— Le Droid,

klarowna i bezbolesna jedna linijka, dla mnie lepsza niż zaakceptowana odpowiedź, bez dodatkowych bibliotek.
— Sam

Tego byś użył, gdybyś użył skrótów zamiast ogranicznika GET-query (znak zapytania): var params={};window.location.hash.replace(/[#&]+([^=&]+)=([^&]*)/gi,function(str,key,value){params[key] = value;}); Przydaje się to w takich rzeczach, jak AJAX, gdzie skrót w oknie jest aktualizowany za pomocą żądań ajax, ale jeden użytkownik może również przejść do interfejsu użytkownika zawierający skrót.
— Tommie

48

Kolejna alternatywna funkcja ...

function param(name) {
    return (location.search.split(name + '=')[1] || '').split('&')[0];
}

nazwa musi być ciągiem.
— Działa

2
To jest mój ulubiony. +1 Warto zauważyć, że jest to wyszukiwanie typu „kończy się na”. Na przykład, jeśli podasz nazwę „Telefon” i istnieje również pole o nazwie „Telefon domowy”, może zwrócić wartość niewłaściwą, jeśli pojawi się ona jako pierwsza w adresie URL.
— efreed

2
To jest źle! Na przykład param('t') == param('sent') == 'yes'w przykładzie PO. Oto dylemat: return (location.search.split(new RegExp('[?&]' + name + '='))[1] || '').split('&')[0]; Zauważ również, że nie możesz stwierdzić, czy parametr istnieje, ponieważ otrzymujesz pusty ciąg znaków dla brakujących parametrów.
— oriadam

Bardzo prosty i elegancki. Działa jak sen. Dziękuję Ci.
— Anjana Silva,

// (aby wymusić istnienie pełnego klucza zamiast tylko ostatniej części klucza)return (location.search.split('?' + name + '=')[1] || location.search.split('&' + name + '=')[1] || '').split('&')[0];
— Aaron

45

Może być za późno. Ale ta metoda jest bardzo łatwa i prosta

<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="jquery.url.js"></script>

<!-- URL:  www.example.com/correct/?message=done&year=1990 -->

<script type="text/javascript">
$(function(){
    $.url.attr('protocol')  // --> Protocol: "http"
    $.url.attr('path')      // --> host: "www.example.com"
    $.url.attr('query')         // --> path: "/correct/"
    $.url.attr('message')       // --> query: "done"
    $.url.attr('year')      // --> query: "1990"
});

AKTUALIZACJA
Wymaga wtyczki URL: plugins.jquery.com/url
Dzięki -Ripounet


2
Kto zdecyduje się na to, powinien najpierw sprawdzić repozytorium. Użycie uległo zmianie. $ .url.attr („wiadomość”) staje się $ .url („zapytanie”) i daje tylko pełne zapytanie! Aby uzyskać tylko jeden parametr, musiałem: $ .url („zapytanie”). Split („=”) [1] url link github
— pseudozach

34

Lub możesz użyć tej schludnej małej funkcji, ponieważ po co nadmiernie skomplikowane rozwiązania?

function getQueryParam(param, defaultValue = undefined) {
    location.search.substr(1)
        .split("&")
        .some(function(item) { // returns first occurence and stops
            return item.split("=")[0] == param && (defaultValue = item.split("=")[1], true)
        })
    return defaultValue
}

który wygląda jeszcze lepiej, gdy jest uproszczony i on-line:

tl; dr rozwiązanie jednowierszowe

var queryDict = {};
location.search.substr(1).split("&").forEach(function(item) {queryDict[item.split("=")[0]] = item.split("=")[1]})
wynik:
queryDict [„wysłane”] // niezdefiniowane lub „wartość”

Ale co, jeśli masz zakodowane znaki lub klucze wielowartościowe ?

Lepiej zobacz tę odpowiedź: Jak uzyskać wartości ciągu zapytania w JavaScript?

Zapowiedź

"?a=1&b=2&c=3&d&e&a=5&a=t%20e%20x%20t&e=http%3A%2F%2Fw3schools.com%2Fmy%20test.asp%3Fname%3Dståle%26car%3Dsaab"
> queryDict
a: ["1", "5", "t e x t"]
b: ["2"]
c: ["3"]
d: [undefined]
e: [undefined, "http://w3schools.com/my test.asp?name=ståle&car=saab"]

> queryDict["a"][1] // "5"
> queryDict.a[1] // "5"

3
Podział łańcucha może być również szybszy niż wyrażenie regularne. To nie jest czynnik, biorąc pod uwagę, że adres URL zostanie przeanalizowany tylko raz.
— Patrick

To rozwiązanie (pierwsze), które działało idealnie dla mnie w różnych przeglądarkach - dziękuję!
— NickyTheWrench

1
@NickyTheWrench Wspaniale to słyszeć, dziękuję! W każdym razie pamiętaj, że jest to bardzo proste rozwiązanie, jeśli otrzymasz skomplikowane parametry adresu URL zawierające znaki specjalne, lepiej sprawdź podany link.
— Qwerty

@ Qwerty yup - mój przypadek użycia jest bardzo prosty, gdzie parametr jest zawsze taki sam itp. (W zasadzie dokładnie to, o co poprosił OP) Jeszcze raz dziękuję!
— NickyTheWrench

1
@BernardVanderBeken Interesujące, naprawiłem to, tak czy inaczej, jest to raczej głupie rozwiązanie, to na dole, które obsługuje zakodowane znaki i tablice, jest znacznie lepsze.
— Qwerty

33

Używanie URLSearchParams:

var params = new window.URLSearchParams(window.location.search);
console.log(params.get('name'));

Uważaj na kompatybilność (przeważnie jest w porządku, ale IE i Edge mogą być inną historią, sprawdź to w celu uzyskania kompatybilnego odniesienia: https://developer.mozilla.org/en-US/docs/Web/API/URLSearchParams )


Nie większość przeglądarek może tego używać.
— saf21

URLSearchParams zastępuje znak specjalny „+” spacją. Więc jeśli twój adres URL ma znak „+”, zostanie zastąpiony.
— Growler

11

Ten jest prosty i działał dla mnie

$.urlParam = function(name){
    var results = new RegExp('[\?&]' + name + '=([^&#]*)').exec(window.location.href);
    return results[1] || 0;
}

więc jeśli twój adres URL to http://www.yoursite.com?city=4

Spróbuj tego

console.log($.urlParam('city'));

10

Być może chcesz rzucić okiem na Dentist JS ? (wyłączenie odpowiedzialności: napisałem kod)

kod:

document.URL == "http://helloworld.com/quotes?id=1337&author=kelvin&message=hello"
var currentURL = document.URL;
var params = currentURL.extract();
console.log(params.id); // 1337
console.log(params.author) // "kelvin"
console.log(params.message) // "hello"

z Dentist JS możesz w zasadzie wywołać funkcję extract () na wszystkich ciągach znaków (np. document.URL.extract ()), a otrzymasz HashMap wszystkich znalezionych parametrów. Można go również dostosowywać do obsługi ograniczników i wszystkich innych.

Wersja zminimalizowana <1kb


5

Mam nadzieję, że to pomoże.

 <script type="text/javascript">
   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;
   }

    $(window).load(function() {
      var param = getParameters();
      if (typeof param.sent !== "undefined") {
        // Do something.
      }
    });
</script>

5

function GetRequestParam(param)
{
	var res = null;
	try{
		var qs = decodeURIComponent(window.location.search.substring(1));//get everything after then '?' in URI
		var ar = qs.split('&');
		$.each(ar, function(a, b){
			var kv = b.split('=');
			if(param === kv[0]){
				res = kv[1];
				return false;//break loop
			}
		});
	}catch(e){}
	return res;
}



3

Jest taka wspaniała biblioteka: https://github.com/allmarkedup/purl

co pozwala zrobić po prostu

url = 'http://example.com?sent=yes';
sent = $.url(url).param('sent');
if (typeof sent != 'undefined') { // sent exists
   if (sent == 'yes') { // sent is equal to yes
     // ...
   }
}

Przykładem jest założenie, że używasz jQuery. Możesz również użyć go jako zwykłego javascript, wówczas składnia byłaby nieco inna.


1
Ta biblioteka nie jest już utrzymywana, ale korzystam z niej i jest świetna. Upewnij się, że używasz parametru param not attr, aby uzyskać parametry ciągu zapytania, jak autor zawarł w swoim przykładzie.
— Action Dan

3

To może być przesada, ale jest to dość popularne biblioteki teraz dostępne w celu analizowania URI, zwanych URI.js .

Przykład

var uri = "http://example.org/foo.html?technology=jquery&technology=css&blog=stackoverflow";
var components = URI.parse(uri);
var query = URI.parseQuery(components['query']);
document.getElementById("result").innerHTML = "URI = " + uri;
document.getElementById("result").innerHTML += "<br>technology = " + query['technology'];

// If you look in your console, you will see that this library generates a JS array for multi-valued queries!
console.log(query['technology']);
console.log(query['blog']);
<script src="https://cdnjs.cloudflare.com/ajax/libs/URI.js/1.17.0/URI.min.js"></script>

<span id="result"></span>


3

Tak prosty, że możesz użyć dowolnego adresu URL i uzyskać wartość

function getParameterByName(name, url) {
    if (!url) url = window.location.href;
    name = name.replace(/[\[\]]/g, "\\$&");
    var regex = new RegExp("[?&]" + name + "(=([^&#]*)|&|#|$)"),
    results = regex.exec(url);
    if (!results) return null;
    if (!results[2]) return '';
    return decodeURIComponent(results[2].replace(/\+/g, " "));
}

Przykład użycia

// query string: ?first=value1&second=&value2
var foo = getParameterByName('first'); // "value1"
var bar = getParameterByName('second'); // "value2" 

Uwaga: Jeśli parametr występuje kilka razy (? Pierwszy = wartość1 i drugi = wartość2), otrzymasz pierwszą wartość (wartość1) i drugą wartość jako (wartość2).


2

To da ci przyjemny przedmiot do pracy

    function queryParameters () {
        var result = {};

        var params = window.location.search.split(/\?|\&/);

        params.forEach( function(it) {
            if (it) {
                var param = it.split("=");
                result[param[0]] = param[1];
            }
        });

        return result;
    }

I wtedy;

    if (queryParameters().sent === 'yes') { .....

split (/ \? | \ & /) oznacza to
— Selva Ganapathi

2

Jest to oparte na odpowiedzi Gazoris , ale adres URL dekoduje parametry, dzięki czemu można ich użyć, gdy zawierają dane inne niż cyfry i litery:

function urlParam(name){
    var results = new RegExp('[\?&]' + name + '=([^&#]*)').exec(window.location.href);
    // Need to decode the URL parameters, including putting in a fix for the plus sign
    // https://stackoverflow.com/a/24417399
    return results ? decodeURIComponent(results[1].replace(/\+/g, '%20')) : null;
}

2

Istnieje inny przykład korzystania z biblioteki URI.js.

Przykład odpowiada dokładnie na zadane pytania.

var url = 'http://example.com?sent=yes';
var urlParams = new URI(url).search(true);
// 1. Does sent exist?
var sendExists = urlParams.sent !== undefined;
// 2. Is it equal to "yes"?
var sendIsEqualtToYes = urlParams.sent == 'yes';

// output results in readable form
// not required for production
if (sendExists) {
  console.log('Url has "sent" param, its value is "' + urlParams.sent + '"');
  if (urlParams.sent == 'yes') {
    console.log('"Sent" param is equal to "yes"');
  } else {
    console.log('"Sent" param is not equal to "yes"');
  }
} else {
  console.log('Url hasn\'t "sent" param');
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/URI.js/1.18.2/URI.min.js"></script>


2
http://example.com?sent=yes

Najlepsze rozwiązanie tutaj .

function getUrlParameter(name) {
    name = name.replace(/[\[]/, '\\[').replace(/[\]]/, '\\]');
    var regex = new RegExp('[\\?&]' + name + '=([^&#]*)');
    var results = regex.exec(location.href);
    return results === null ? '' : decodeURIComponent(results[1].replace(/\+/g, '    '));
};

Dzięki powyższej funkcji można uzyskać wartości poszczególnych parametrów:

getUrlParameter('sent');

Idealna odpowiedź!
— Srijani Ghosh

1

Wersja odpowiedzi Coffeescript dla Sameera

getUrlParameter = (sParam) ->
  sPageURL = window.location.search.substring(1)
  sURLVariables = sPageURL.split('&')
  i = 0
  while i < sURLVariables.length
    sParameterName = sURLVariables[i].split('=')
    if sParameterName[0] == sParam
      return sParameterName[1]
    i++

1

Niewielka poprawa odpowiedzi Sameera, buforowanie parametrów do zamknięcia, aby uniknąć analizowania i zapętlania wszystkich parametrów przy każdym wywołaniu

var getURLParam = (function() {
    var paramStr = decodeURIComponent(window.location.search).substring(1);
    var paramSegs = paramStr.split('&');
    var params = [];
    for(var i = 0; i < paramSegs.length; i++) {
        var paramSeg = paramSegs[i].split('=');
        params[paramSeg[0]] = paramSeg[1];
    }
    console.log(params);
    return function(key) {
        return params[key];
    }
})();


1

W waniliowym JavaScript możesz łatwo pobrać parametry (location.search), pobrać podłańcuch (bez?) I przekształcić go w tablicę, dzieląc ją na „&”.

Podczas iteracji przez urlParams możesz następnie ponownie podzielić ciąg za pomocą „=” i dodać go do obiektu „params” jako object [elmement [0]] = element [1]. Super prosty i łatwy dostęp.

http://www.website.com/?error=userError&type=handwritten

            var urlParams = location.search.substring(1).split('&'),
                params = {};

            urlParams.forEach(function(el){
                var tmpArr = el.split('=');
                params[tmpArr[0]] = tmpArr[1];
            });


            var error = params['error'];
            var type = params['type'];

1

Co się stanie, jeśli w parametrze URL występuje parametr &, np. Nazwa_pliku = „p & g.html” i identyfikator użytkownika = 66

W takim przypadku 1. funkcja nie będzie działać poprawnie. Więc zmodyfikowałem kod

function getUrlParameter(sParam) {
    var sURLVariables = window.location.search.substring(1).split('&'), sParameterName, i;

    for (i = 0; i < sURLVariables.length; i++) {
        sParameterName = sURLVariables[i].split('=');

        if (sParameterName[0] === sParam) {
            return sParameterName[1] === undefined ? true : decodeURIComponent(sParameterName[1]);
        }
    }
}

1

Wprawdzie dodaję swoją odpowiedź do pytania, na które udzielono odpowiedzi, ale ma to następujące zalety:

- Nie zależy od żadnych zewnętrznych bibliotek, w tym jQuery

- Nie zanieczyszcza globalnej przestrzeni nazw funkcji poprzez rozszerzenie „String”

- Brak tworzenia globalnych danych i niepotrzebne przetwarzanie po znalezieniu dopasowania

- Obsługa problemów z kodowaniem i akceptowanie (zakładanie) niekodowanej nazwy parametru

- Unikanie wyraźnych forpętli

String.prototype.urlParamValue = function() {
    var desiredVal = null;
    var paramName = this.valueOf();
    window.location.search.substring(1).split('&').some(function(currentValue, _, _) {
        var nameVal = currentValue.split('=');
        if ( decodeURIComponent(nameVal[0]) === paramName ) {
            desiredVal = decodeURIComponent(nameVal[1]);
            return true;
        }
        return false;
    });
    return desiredVal;
};

Wtedy użyjesz go jako:

var paramVal = "paramName".urlParamValue() // null if no match

1

Jeśli chcesz znaleźć konkretny parametr z określonego adresu URL:

function findParam(url, param){
  var check = "" + param;
  if(url.search(check )>=0){
      return url.substring(url.search(check )).split('&')[0].split('=')[1];
  }
}  

var url = "http://www.yourdomain.com/example?id=1&order_no=114&invoice_no=254";  
alert(findParam(url,"order_no"));

0

Inne rozwiązanie wykorzystujące jQuery i JSON, dzięki czemu można uzyskać dostęp do wartości parametrów za pośrednictwem obiektu.

var loc = window.location.href;
var param = {};
if(loc.indexOf('?') > -1)
{
    var params = loc.substr(loc.indexOf('?')+1, loc.length).split("&");

    var stringJson = "{";
    for(var i=0;i<params.length;i++)
    {
        var propVal = params[i].split("=");
        var paramName = propVal[0];
        var value = propVal[1];
        stringJson += "\""+paramName+"\": \""+value+"\"";
        if(i != params.length-1) stringJson += ",";
    }
    stringJson += "}";
    // parse string with jQuery parseJSON
    param = $.parseJSON(stringJson);
}

Zakładając, że twój adres URL to http://example.com/?search=hello+world&language=en&page=3

Potem wystarczy tylko użyć takich parametrów:

param.language

wracać

en

Najbardziej użytecznym zastosowaniem tego jest uruchomienie go przy ładowaniu strony i użycie zmiennej globalnej do użycia parametrów w dowolnym miejscu, w którym możesz ich potrzebować.

Jeśli twój parametr zawiera wartości liczbowe, po prostu przeanalizuj wartość.

parseInt(param.page)

Jeśli nie ma parametrów, parambędzie tylko pusty obiekt.


-1
$.urlParam = function(name) {
  var results = new RegExp('[\?&amp;]' + name + '=([^&amp;#]*)').exec(window.location.href);
  return results[1] || 0;
}

i jest niepoprawnie zakodowany jako „& amp;” w powyższej odpowiedzi sprawdź poprawną odpowiedź stackoverflow.com/a/25359264/73630
— Palani,

-1

Użyj tego

$.urlParam = function(name) {
  var results = new RegExp('[\?&amp;]' + name + '=([^&amp;#]*)').exec(window.location.href);
  return results[1] || 0;
}
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.