Как я могу заменить переменную в запросе get в PHP? - PullRequest
1 голос
/ 26 августа 2009

У меня есть URL

http://example.com/test?xyz=27373&page=4&test=5

, который я хочу преобразовать, заменив page=4 на page=XYZ

как я могу сделать это с preg_replace?

Ответы [ 7 ]

5 голосов
/ 26 августа 2009

Да, вы можете использовать

$oldurl = "http://test.com/test?xyz=27373&page=4&test=5"
$newurl = preg_replace("/page=\d+/", "page=XYZ", $oldurl);

Или вы можете восстановить URL из $_GET superglobal.

2 голосов
/ 26 августа 2009

Хотите установить значение xyz на значение страницы? Я думаю, что вам может потребоваться указать немного больше. Но это легко изменить, если вы не знаете регулярное выражение.

$url = 'http://test.com/test?xyz=27373&page=4&test=5';
$urlQuery = parseUrl($url, PHP_URL_QUERY);
parse_str($urlQuery, $queryData);
$queryData['page'] = $queryData['xyz'];
unset($queryData['xyz']);
$query = http_build_query($queryData);
$outUrl = substr_replace($url, $query, strpos($url, '?'));
0 голосов
/ 26 августа 2009

Если это ваша собственная страница (а вы в настоящее время находитесь на этой странице), эти переменные появятся в глобальной переменной с именем $_GET, и вы можете использовать что-то вроде array_slice, unset или array_filter для удаления нежелательные переменные и восстановить URL.

Если у вас просто есть этот URL в виде строки, то каковы именно критерии удаления информации? Технически нет никакой разницы между

...?xyz=27373&page=4&test=5

и

...?test=5&xyz=27373&page=4

так что просто удалить все, кроме первого параметра, может не то, что вам нужно.

Если вы хотите удалить все, кроме xyz param. Взгляните на parse_url и parse_str

0 голосов
/ 26 августа 2009

Я уверен, что вы могли бы что-то сделать с помощью регулярного выражения. Однако, если вы указали URL, который вы сейчас обрабатываете, у вас уже есть все переменные запроса в $ _Request.

Итак, перестройте URL, заменив значения, которые вы хотите заменить, и затем перенаправьте на новый URL.

В противном случае найдите учебник по регулярным выражениям.

0 голосов
/ 26 августа 2009
$url = 'http://test.com/test?xyz=27373&page=4&test=5';
preg_match('/xyz=([^&]+)/', $url, $newpage);
$new = preg_replace('/page=([^&]+)/', $newpage[0], $url);
$new = preg_replace('/xyz=([^&]+)&/', '', $new);

Это превратится

http://test.com/test?xyz=27373&page=4&test=5

в

http://test.com/test?page=27373&test=5

Простите, если вы этого не хотели, но ваш вопрос не совсем ясен.

0 голосов
/ 26 августа 2009

Хотите заменить каждое значение на другое или оба на одно?

0 голосов
/ 26 августа 2009

Что именно вы пытаетесь сделать? Вопрос немного неясен.

$ XYZ = $ _GET ['xyz']; $ PAGE = $ _GET ['page'];

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...