удаление строки запроса с помощью php (preg_replace) - PullRequest
2 голосов
/ 23 марта 2010

http://www.chuckecheese.com/rotator.php?cheese=4&id=1

Я хочу убрать удостоверение личности, оставив сыр в одиночестве.Я попытался:

$qs = preg_replace("[^&id=*]" ,'',$_SERVER[QUERY_STRING]);

Но это говорит о том, что я использовал неправильный модификатор.Я хочу удалить «$ id =» и любой номер, следующий за ним.Действительно ли регулярные выражения настолько сложны, насколько они кажутся мне?

Ответы [ 2 ]

3 голосов
/ 23 марта 2010

Вы получаете неправильный модификатор, потому что вам нужно окружить свое выражение произвольным разделителем. Я склонен использовать !, потому что я редко хочу это искать, но /, ~ и другие распространены. Итак:

$qs = preg_replace('!&id=.*!', '', $_SERVER['QUERY_STRING']);

Другой способ сделать это - использовать parse_url(). Например:

$s = 'http://www.chuckecheese.com/rotator.php?cheese=4&id=1';
$url = parse_url($s);
parse_str($url['query'], $qs);
unset($qs['id']);
$url['query'] = http_build_str($qs);
$out = http_build_url($url);
echo $out;

Примечание: для этого требуется расширение pecl_http , которое, по-видимому, необходимо компилировать самостоятельно в Windows.

1 голос
/ 23 марта 2010

Если идентификатор действительно может быть чем-либо, попробуйте это:

$qs = preg_replace("/(&|?)id=[^&]+/", '', $_SERVER[QUERY_STRING]);

Если идентификатор определенно является числом, этот должен выполнить трюк:

$qs = preg_replace("/(&|?)id=\d+/", '', $_SERVER[QUERY_STRING]);
...