Kasowanie parametru z URL

0

Witam,
Mam kod

$var = $_GET['myurl'];

Moje przykładowe URL:


https://mydomain/sample/value-2019?fbclid=xxxxxxxxxxxx

lub

https://mydomain/sample/value-2019?date=2018&fbclid=xxxxxxxxxxxx


lub 

https://mydomain/sample/value-2019?fbclid=xxxxxxxxxxxx&id=10
lub

https://mydomain/sample/value-2019?x=xyz


etc...


$_GET['myurl'] - to jest mój aktualny URL.

W jaki sposób sprawdzić czy parametr fbclid istnieje w $var i jeśli tak, to go usunąć?

Na przykład z

$var = 'https://mydomain/sample/value-2019?date=2018&fbclid=xxxxxxxxxxxx'

Chciałbym otrzymać:

$var = 'https://mydomain/sample/value-2019?date=2018'

WAŻNE: Parametr fbclid nie zawsze istnieje i nie zawsze jest w tym samym miejscu.

Wie ktoś może jak to zrobić? Bardzo proszę o pomoc.

0

Nie zrobię tego za Ciebie, ale mogę pomóc :P

Czy znasz takie coś jak strpos - http://php.net/manual/pl/function.strpos.php ?

1

Pamiętaj, że musisz zrobić przekierowanie. Jeżeli usuniesz sam parametr z $_GET, to nic się nie zmieni.

1

@Desu: zależy w sumie od tego, co OP chce z tym ciągiem zrobić.
Ja to rozumiem tak, że pobiera sobie cały URL do zmiennej, a potem się nad nią znęca ;)
Równie dobrze można by było dostać się do poszczególnych zmiennych korzystając z tablicy superglobalnej $_GET - ale z tego co zrozumiałem, to nie interesuje go rozbijanie $_GET na poszczególne elementy, tylko stwierdzenie, czy dany parametr/ciąg występuje.

Aczkolwiek, jeśli chodzi o stworzenie URL'a wyjściowego, to ja bym przeleciał przez $_GET pętlą foreach i jeśli w danej iteracji natrafiłbym na fbclid to bym po prostu tej wartości nie przekazywał dalej, ale przeszedł do następnej iteracji.

1
// function removeQueryKey(@string, @array)
function removeQueryKey($url, $keys = []) {
	if(($query = parse_url($url, PHP_URL_QUERY)) && !empty($query)) {
		list($urlN) = explode("?",$url,2);
		$newQuery = [];
		parse_str($query, $queryArray);
		foreach($queryArray as $key => $val) {
			if(!in_array($key, $keys)) {
				$newQuery[$key] = $val;
			}
		}
		return $urlN."?".http_build_query($newQuery);
	} else {
		return $url;
	}
}

Przykład:

print_r(removeQueryKey("https://example.com/sample/value-2019?date=2018&fbclid=xxxxxxxxxxxx", ["fbclid"])); 
1
baracadus napisał(a):

https://mydomain/sample/value-2019?fbclid=xxxxxxxxxxxx
https://mydomain/sample/value-2019?date=2018&fbclid=xxxxxxxxxxxx
https://mydomain/sample/value-2019?fbclid=xxxxxxxxxxxx&id=10
https://mydomain/sample/value-2019?x=xyz

W jaki sposób sprawdzić czy parametr fbclid istnieje w $var i jeśli tak, to go usunąć?
WAŻNE: Parametr fbclid nie zawsze istnieje i nie zawsze jest w tym samym miejscu.

Wie ktoś może jak to zrobić? Bardzo proszę o pomoc.

$url = preg_replace('/[&?]fbclid=[^&]*/i', "", $url);

ewentualnie:

$url = preg_replace('/[&?]fbclid=[^&]*/i', "", $url, -1, $count);

Jeśli chcesz policzyć czy i ile łańcuchów wykryto i podmieniono.

2

Testowałem metody z tego wątku ... i nie działają przynajmniej u mnie.

Ja Ci proponuję takie coś, dzisiaj sobie opracowałem gdy inne metody zawiodły:

$url=$_SERVER['REQUEST_URI'];

							$parts = parse_url($url);
							//echo $parts['query'];						
							
							if ($parts['query'] == "id=jakiesid&p=jakieparametrydziwne&x=xxxxxxxxx")
							
							{
								echo "usun mnie";
							}
							else 
							{
								echo ":(";
							}

1 użytkowników online, w tym zalogowanych: 0, gości: 1