PHP更改字符串中的URL参数

PHP更改字符串中的URL参数,php,regex,post,get,Php,Regex,Post,Get,正在尝试将下面字符串中“page”的URL参数值更改为“99” $pageURL = "http://www.test.com/search?loc=Rich%2C+VA&serv=1&spec=0&min_price=5&max_price=9999&date=&time=0&filters=0&page=45&latPos=459.16689191899521&longPos=-1263.080998195434

正在尝试将下面字符串中“page”的URL参数值更改为“99”

$pageURL = "http://www.test.com/search?loc=Rich%2C+VA&serv=1&spec=0&min_price=5&max_price=9999&date=&time=0&filters=0&page=45&latPos=459.16689191899521&longPos=-1263.08099819543457&zoom=11&ne_lat=499.31460613487112&ne_lng=-1222.88049770715332&sw_lat=458.90693340071935&sw_lng=-1923.2801253927002"
我尝试了这个,但没有成功:

preg_replace("&page=.*&", "&page=99&", $pageURL);
这是我想要的结果。请注意,参数现在是“&page=99&”。等等

你几乎是对的:

preg_replace("/&page=\d+&/", "&page=99&", $pageURL);
你几乎是对的:

preg_replace("/&page=\d+&/", "&page=99&", $pageURL);
尝试
preg\u replace(“/&page=[^&]*/”、“&page=99”、$pageURL)

您的搜索包括有问题的&character(.is any non newline character)。

尝试
preg\u replace(“/&page=[^&]*/”,“&page=99”,$pageURL)


您的搜索包括&character(.is any non newline character),这是有问题的。

没有正则表达式的一个选项是将parse\u url与parse\u str一起使用,然后将url放回一起

>>> $url = parse_url("http://www.test.com/search?loc=Rich%2C+VA&serv=1&spec=0&min_price=5&max_price=9999&date=&time=0&filters=0&page=45&latPos=459.16689191899521&longPos=-1263.08099819543457&zoom=11&ne_lat=499.31460613487112&ne_lng=-1222.88049770715332&sw_lat=458.90693340071935&sw_lng=-1923.2801253927002")
=> [
   "scheme" => "http",
   "host"   => "www.test.com",
   "path"   => "/search",
   "query"  => "loc=Rich%2C+VA&serv=1&spec=0&min_price=5&max_price=9999&date=&time=0&filters=0&page=45&latPos=459.16689191899521&longPos=-1263.08099819543457&zoom=11&ne_lat=499.31460613487112&ne_lng=-1222.88049770715332&sw_lat=458.90693340071935&sw_lng=-1923.2801253927002"
   ]
>>> $query = [];
=> []
>>> parse_str($url['query'], $query)
=> null
>>> $query
=> [
   "loc"       => "Rich, VA",
   "serv"      => "1",
   "spec"      => "0",
   "min_price" => "5",
   "max_price" => "9999",
   "date"      => "",
   "time"      => "0",
   "filters"   => "0",
   "page"      => "45",
   "latPos"    => "459.16689191899521",
   "longPos"   => "-1263.08099819543457",
   "zoom"      => "11",
   "ne_lat"    => "499.31460613487112",
   "ne_lng"    => "-1222.88049770715332",
   "sw_lat"    => "458.90693340071935",
   "sw_lng"    => "-1923.2801253927002"
   ]
>>> $query['page'] = 99
=> 99
>>> $url['query'] = http_build_query($query);
=> "loc=Rich%2C+VA&serv=1&spec=0&min_price=5&max_price=9999&date=&time=0&filters=0&page=99&latPos=459.16689191899521&longPos=-1263.08099819543457&zoom=11&ne_lat=499.31460613487112&ne_lng=-1222.88049770715332&sw_lat=458.90693340071935&sw_lng=-1923.2801253927002"
>>> http_build_url($url)
对于http_build_url,您需要pecl http扩展。如果没有,可以直接连接

>>> $url['scheme'] . '://' $url['host'] . $url ['path'] . '?' . $url['query']
=> "http://www.test.com/search?loc=Rich%2C+VA&serv=1&spec=0&min_price=5&max_price=9999&date=&time=0&filters=0&page=99&latPos=459.16689191899521&longPos=-1263.08099819543457&zoom=11&ne_lat=499.31460613487112&ne_lng=-1222.88049770715332&sw_lat=458.90693340071935&sw_lng=-1923.2801253927002"
下面是一个示例脚本

$pageURL = "http://www.test.com/search?loc=Rich%2C+VA&serv=1&spec=0&min_price=5&max_price=9999&date=&time=0&filters=0&page=45&latPos=459.16689191899521&longPos=-1263.08099819543457&zoom=11&ne_lat=499.31460613487112&ne_lng=-1222.88049770715332&sw_lat=458.90693340071935&sw_lng=-1923.2801253927002";
$newUrl = parse_url($pageUrl);
$query = parse_str($new_url['query']);
$query['page'] = 99;
$newUrl['query'] = http_build_query($query);
http_build_url($newUrl);

没有正则表达式的一个选项是将parse_url与parse_str一起使用,然后将url重新组合在一起

>>> $url = parse_url("http://www.test.com/search?loc=Rich%2C+VA&serv=1&spec=0&min_price=5&max_price=9999&date=&time=0&filters=0&page=45&latPos=459.16689191899521&longPos=-1263.08099819543457&zoom=11&ne_lat=499.31460613487112&ne_lng=-1222.88049770715332&sw_lat=458.90693340071935&sw_lng=-1923.2801253927002")
=> [
   "scheme" => "http",
   "host"   => "www.test.com",
   "path"   => "/search",
   "query"  => "loc=Rich%2C+VA&serv=1&spec=0&min_price=5&max_price=9999&date=&time=0&filters=0&page=45&latPos=459.16689191899521&longPos=-1263.08099819543457&zoom=11&ne_lat=499.31460613487112&ne_lng=-1222.88049770715332&sw_lat=458.90693340071935&sw_lng=-1923.2801253927002"
   ]
>>> $query = [];
=> []
>>> parse_str($url['query'], $query)
=> null
>>> $query
=> [
   "loc"       => "Rich, VA",
   "serv"      => "1",
   "spec"      => "0",
   "min_price" => "5",
   "max_price" => "9999",
   "date"      => "",
   "time"      => "0",
   "filters"   => "0",
   "page"      => "45",
   "latPos"    => "459.16689191899521",
   "longPos"   => "-1263.08099819543457",
   "zoom"      => "11",
   "ne_lat"    => "499.31460613487112",
   "ne_lng"    => "-1222.88049770715332",
   "sw_lat"    => "458.90693340071935",
   "sw_lng"    => "-1923.2801253927002"
   ]
>>> $query['page'] = 99
=> 99
>>> $url['query'] = http_build_query($query);
=> "loc=Rich%2C+VA&serv=1&spec=0&min_price=5&max_price=9999&date=&time=0&filters=0&page=99&latPos=459.16689191899521&longPos=-1263.08099819543457&zoom=11&ne_lat=499.31460613487112&ne_lng=-1222.88049770715332&sw_lat=458.90693340071935&sw_lng=-1923.2801253927002"
>>> http_build_url($url)
对于http_build_url,您需要pecl http扩展。如果没有,可以直接连接

>>> $url['scheme'] . '://' $url['host'] . $url ['path'] . '?' . $url['query']
=> "http://www.test.com/search?loc=Rich%2C+VA&serv=1&spec=0&min_price=5&max_price=9999&date=&time=0&filters=0&page=99&latPos=459.16689191899521&longPos=-1263.08099819543457&zoom=11&ne_lat=499.31460613487112&ne_lng=-1222.88049770715332&sw_lat=458.90693340071935&sw_lng=-1923.2801253927002"
下面是一个示例脚本

$pageURL = "http://www.test.com/search?loc=Rich%2C+VA&serv=1&spec=0&min_price=5&max_price=9999&date=&time=0&filters=0&page=45&latPos=459.16689191899521&longPos=-1263.08099819543457&zoom=11&ne_lat=499.31460613487112&ne_lng=-1222.88049770715332&sw_lat=458.90693340071935&sw_lng=-1923.2801253927002";
$newUrl = parse_url($pageUrl);
$query = parse_str($new_url['query']);
$query['page'] = 99;
$newUrl['query'] = http_build_query($query);
http_build_url($newUrl);

任何页码变为99?如果参数页始终为45到99,而不使用正则表达式,则参数页将有一个新值“99”,而不是原来的“45”。
str_replace
str_replace的效率要高得多(“&page=45&”,“&page=99&”,$pageURL)任何页码变为99?如果参数页始终为45到99,而不使用正则表达式,则参数页将有一个新的值“99”,而不是原来的“45”。
str_replace
str_replace的效率远远高于
str_replace(“&page=45&”,“&page=99&”,$pageURL)不客气。如果您确切知道要替换什么,请使用str_replace而不是正则表达式。不客气。如果您确切知道要替换什么,请使用str_replace而不是正则表达式。