Использование preg_replace для переменных URL - PullRequest
0 голосов
/ 18 апреля 2019

У меня есть очень длинные переменные URL. Вот один пример.

http://localhost/index.php?image=XYZ_1555025022.jpg&mppdf=yes&pdfname=Printer&deskew=yes&autocrop=yes&print=no&mode=color&printscalewidth100=&printscaleheight100=&rand=56039

В конечном итоге было бы неплохо, если бы я мог найти способ использовать preg_replace, чтобы просто изменить одну переменную, даже если в середине строки, например, в приведенной выше строке, изменить print=no на 'print=yes, например.

Я, однако, согласен на совпадение с шаблоном preg_replace, которое позволяет мне удалить ?image=XYZ_1555025022.jpg. поскольку это переменная, имя может быть любым. Он всегда будет иметь «?image"» в начале и в конце «&»

Я думаю, что одна из проблем, с которыми я столкнулся, заключается в том, что preg_match, похоже, имеет проблемы со строками, в которых содержится "=".

Я полностью потерялся в этом, и все эти персонажи могут вращаться головой. Может быть, кто-то может дать некоторые рекомендации, пожалуйста?

Ответы [ 2 ]

1 голос
/ 18 апреля 2019

Вы можете использовать str_replace() или preg_replace(), чтобы выполнить свою работу, но parse_url() с parse_str() даст вам больше элементов управления для простого изменения любых параметров по индексу массива. Наконец, используйте http_build_query () , чтобы сделать ваш окончательный URL после изменения.

<?php
$url = 'http://localhost/index.php?image=XYZ_1555025022.jpg&mppdf=yes&pdfname=Printer&deskew=yes&autocrop=yes&print=no&mode=color&printscalewidth100=&printscaleheight100=&rand=56039';
$parts = parse_url($url);
parse_str($parts['query'], $query);
echo "BEFORE".PHP_EOL;
print_r($query);
$query['print'] = 'yes';
echo "AFTER".PHP_EOL;
print_r($query);
?>

DEMO: https://3v4l.org/npGij

1 голос
/ 18 апреля 2019

Вот демонстрация того, как вы можете делать некоторые вещи, которые вы хотите, используя explode, parse_str и http_build_query:

$url = 'http://localhost/index.php?image=XYZ_1555025022.jpg&mppdf=yes&pdfname=Printer&deskew=yes&autocrop=yes&print=no&mode=color&printscalewidth100=&printscaleheight100=&rand=56039';
// split on first ?
list($path, $query_string) = explode('?', $url, 2);
// parse the query string
parse_str($query_string, $params);
// delete image param
unset($params['image']);
// change the print param
$params['print'] = 'yes';
// rebuild the query
$query_string = http_build_query($params);
// reassemble the URL
$url = $path . '?' . $query_string;
echo $url;

Вывод:

http://localhost/index.php?mppdf=yes&pdfname=Printer&deskew=yes&autocrop=yes&print=yes&mode=color&printscalewidth100=&printscaleheight100=&rand=56039

Демонстрация на 3v4l.org

...