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.