我有一些很长的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
更改为{{1, }}。
但是,我将满足'print=yes
模式匹配的要求,这使我可以删除preg_replace
。因为这是一个变量,所以名称可以是任何东西。开头和结尾始终为“ ?image=XYZ_1555025022.jpg
”
我认为我遇到的问题之一是?image"
似乎在字符串中包含“ =”的问题。
我在这里完全迷失了,所有那些使人迷惑的角色都可能旋转。也许有人可以给些指导吗?
答案 0 :(得分:1)
这是一个演示示例,说明如何使用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
答案 1 :(得分:1)
您可以使用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);
?>