---
title: "Ta bort en del av querystring - preg_replace?"
type: "forum-thread"
url: "https://www.webforum.nu/amne/php/175873-ta-bort-en-del-av-querystring-preg-replace"
topic: "PHP"
topic_url: "https://www.webforum.nu/amne/php"
author: "learn"
published: "2008-12-15T14:10:38.000Z"
updated: "2009-02-15T22:48:55.000Z"
replies: 21
views: 959
page: 1
pages: 2
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/php/175873-ta-bort-en-del-av-querystring-preg-replace"
---

# Ta bort en del av querystring - preg_replace?

_Sida 1 av 2._

## #1 — learn, 2008-12-15T14:10Z

Jag lyckas inte fixa det här med preg_replace...

En sträng (querystring):

```
$str = "?ett=blablabla&tva=blabla&tre=lalalala"
```

Nu vill jag kunna plocka bort valfri del av strängen, t.ex. "tva", på det här viset:

```php
remove_part($str, "tva")
```

Vilket ska resultera i:

> ?ett=blablabla&tre=lalalala

 

Funktionen bör alltså se ut ungefär såhär:

```php
function remove_part($str, $part)
{
   return preg_replace('/(\&|\?)$part(\&)/', '', $str);
}
```

Nu funkar ju inte ovan riktigt, men jag tror jag är på hyfsat rätt väg iaf. Snälla hjälp mig få preg_replace korrekt.

$part kan alltså vara den första delen i querystringen (inledas med ?) eller en senare del (inledas med &). Nästa dels & måste finnas kvar, och om den delen nu blir den fösta i querystringen ska den istället inledas med ?... 

Exempel:

```php
remove_part($str, "ett");
// Resulterar i "?tva=blabla&tre=lalalala"
```

Lite invecklat, men jag tror ni förstår hur jag menar.

Tack!

Permalänk: https://www.webforum.nu/p/175873

## #2 — pulse, 2008-12-15T16:23Z

Det här funkar men är ju inte lika vackert som regexp :)

```
<?php
echo "<pre>";
$str = "?ett=blablabla&tva=blabla&tre=lalalala";
echo $str . PHP_EOL;
$str = trim($str, "?");
$parts = explode("&", $str);
$list = array();
foreach($parts as $part){
	list($key, $value) = explode("=", $part);
	$list[$key] = $key . "=" . $value;
}
unset($list["ett"]);
$str = sprintf("?%s", implode("&", $list));
echo $str . PHP_EOL;
die;
```

Permalänk: https://www.webforum.nu/p/2159671

## #3 — learn, 2008-12-15T16:27Z

Hmm, mm, men jag vill gärna fixa det med preg_replace, känns snyggare. Måste ju gå!

Permalänk: https://www.webforum.nu/p/2159672

## #4 — Peter S, 2008-12-15T17:49Z

```
function remove_part($str, $part)
{
   return preg_replace('/(?:$part=[^&]*&|&$part=[^&]*$)/', '', $str);
}
```

Permalänk: https://www.webforum.nu/p/2159686

## #5 — überfuzz, 2008-12-15T17:59Z

> **pulse skrev:**
>
> Det här funkar men är ju inte lika vackert som regexp :)

@learn - Jag frågar mig, finns det ingen tjusigare sätt att skapa queryn från början i stället för att krångla till det med saker du ändå inte vet hur de fungerar?

Permalänk: https://www.webforum.nu/p/2159689

## #6 — learn, 2008-12-16T08:19Z

Peter S, nej det där funkar inte riktigt...

```php
$str = "?hej=fdfd&test=redkk&yttexsnn";
$part = "test";
$new_str = preg_replace('/(?:$part=[^&]*&|&$part=[^&]*$)/', '', $str);

echo $str;
echo "<br>";
echo $new_str;
echo "<br>";
```

Ger:

> ?hej=fdfd&test=redkk&yttexsnn
> ?hej=fdfd&test=redkk&yttexsnn

Det händer alltså inget med strängen.

überfuzz, nej det kan jag inte.

Permalänk: https://www.webforum.nu/p/2159736

## #7 — Peter S, 2008-12-16T08:39Z

Hmpf, du lurade mig litet genom att antyda att man kunde ha variabler inuti apostrofsträngar ;) Men enligt <http://se2.php.net/language.variables> fungerar det tydligen inte. Så i stället kanske du kan skriva:

```php
function remove_part($str, $part)
{
   return preg_replace('/(?:' . $part . '=[^&]*&|&' . $part . '=[^&]*$)/', '', $str);
}
```

Permalänk: https://www.webforum.nu/p/2159738

## #8 — überfuzz, 2008-12-16T09:24Z

> **learn skrev:**
>
> überfuzz, nej det kan jag inte.

Okej... men vi kanske kan som du förklarar vad du ska göra för något. Vad ska den här lösningen vara till för.

Permalänk: https://www.webforum.nu/p/2159742

## #9 — learn, 2008-12-16T09:38Z

Peter, tack nu fungerar det!  :bire 

überfuzz, strängen är i praktiken en querstring och hämtas mha $\_SERVER. Tack ändå.

Permalänk: https://www.webforum.nu/p/2159745

## #10 — learn, 2008-12-16T09:48Z

Nej vänta nu.

Fel 1:

```php
$str = "?test=blablabla";
$part = "test";
$new_str = preg_replace('/(?:' . $part . '=[^&]*&|&' . $part . '=[^&]*$)/', '', $str);
```

 

> **resultat skrev:**
>
> ?test=blablabla

 

Fel 2:

```php
$str = "?test=blablabla&";
$part = "test";
$new_str = preg_replace('/(?:' . $part . '=[^&]*&|&' . $part . '=[^&]*$)/', '', $str);
```

 

> **resultat skrev:**
>
> ?

Strängen kan ju innehålla bara en del och därför inte innehålla tecknet &

Permalänk: https://www.webforum.nu/p/2159746

## #11 — überfuzz, 2008-12-16T10:17Z

> **learn skrev:**
>
> Peter, tack nu fungerar det!  :bire 
> 
> überfuzz, strängen är i praktiken en querstring och hämtas mha $\_SERVER. Tack ändå.

Vad i $\_SERVER använder du som fråga till databasen? Vad vill du uppnå?

Permalänk: https://www.webforum.nu/p/2159751

## #12 — Peter S, 2008-12-16T11:37Z

```php
preg_replace('/(?:^[?]' . $part . '=.*?$|' . $part . '=[^&]*&|&' . $part . '=[^&]*$)/', '', $str);
```

Permalänk: https://www.webforum.nu/p/2159762

## #13 — learn, 2008-12-16T13:33Z

Nä, nu blev det lite konstigt.

```php
$str = "?test=blablabla";
$part= "test";
$new_str = preg_replace('/(?:^?' . $part . '=.*?$|' . $part . '=[^&]*&|&' . $part . '=[^&]*$)/', '', $str);
```

> Warning: preg_replace() \[function.preg-replace\]: Compilation failed: nothing to repeat at offset 4 in...

überfuzz, jag hämtar strängen mha $\_SERVER\["QUERY_STRING"\], ingen db är inblandad.

Permalänk: https://www.webforum.nu/p/2159777

## #14 — überfuzz, 2008-12-16T16:36Z

Men vet du inte vad du vill göra..?

Permalänk: https://www.webforum.nu/p/2159804

## #15 — Peter S, 2008-12-16T17:17Z

Jag har uppdaterat mitt förra inlägg.

Permalänk: https://www.webforum.nu/p/2159812

## #16 — learn, 2008-12-17T10:17Z

> **Peter S skrev:**
>
> Jag har uppdaterat mitt förra inlägg.

Funkar inte riktigt rätt nu heller.

```php
$str = "?test=blablabla&test2=blablabla&test3";
$part = "test";
$new_str = preg_replace('/(?:^[?]' . $part . '=.*?$|' . $part . '=[^&]*&|&' . $part . '=[^&]*$)/', '', $str);
```

> **tomt resultat skrev:**
>
>

Den tar bort allt, även den andra och den tredje delen...

Resultat **borde** vara:

> ?test2=blablabla&test3

> **überfuzz skrev:**
>
> Men vet du inte vad du vill göra..?

Jo. Jag vill kunna ta en querystring och skapa en ny för att sedan använda i vanliga html-länkar.

Permalänk: https://www.webforum.nu/p/2159903

## #17 — Melea, 2008-12-17T10:26Z

Det är ju för att test2 och test3 innehåller "test".

Permalänk: https://www.webforum.nu/p/2159905

## #18 — learn, 2008-12-17T10:29Z

> **Melea skrev:**
>
> Det är ju för att test2 och test3 innehåller "test".

Nej. Samma tomma resultat för:

```php
$str = "?test=blablabla&hej=blablabla&lalala"
```

Den matchar inte bara ordet i $part.

Permalänk: https://www.webforum.nu/p/2159906

## #19 — Melea, 2008-12-17T10:36Z

Har du alltid tre querystrings? Annars är nog pulse:s lösning att föredra.

Permalänk: https://www.webforum.nu/p/2159908

## #20 — learn, 2008-12-17T13:03Z

Det kan vara allt ifrån 0 till 100 delar/querystrings.

Varför är pulse:s lösning att föredra??

Permalänk: https://www.webforum.nu/p/2159917

---

Tråden på webben: https://www.webforum.nu/amne/php/175873-ta-bort-en-del-av-querystring-preg-replace  
Nästa sida: https://www.webforum.nu/amne/php/175873-ta-bort-en-del-av-querystring-preg-replace/page2.md
