php将vaiable substring移动到字符串的结尾

时间:2017-09-16 16:10:10

标签: php string variables redirect

说我有一个字符串:

something.something/search?&abc=xyz:??????q=hello+there

something.something/search?abc=xyz:??????q=hello+there

我需要将变量子串:[&]abc=xyz:??????移动到sting的末尾。 所以我结束了: something.something/search?q=hello+there&abc=xyz:??????

从一开始就知道子串是多长时间。

我们知道子字符串在第一个?之后就开始了 可能以&abc=xyz:?????或可能abc=xyx:?????开头。

?????可能有也可能没有,但它们的长度不确定。 和内容。 我们知道子串在q=......处结束。 因此,首先?到第一个q=之间的内容会被删除并添加到字符串中。

但是,结尾必须以&开头,且只有1 &

所有这些仅适用于包含something.something/search?的字符串。

子字符串非常可变。

我也想知道在尝试改变之前是否应该测试一下。

由于

它说编辑问题所以这里。我想你越来越近了。 典型的$ url将是: https://www._oogle.com/search?&tbs=qdr:q=hello+there //你好+只有例子。 https://www._oogle.com/search?tbs=qdr:q=hello+there //...qdr:null|h | d | w | m | y用于过去页面搜索。 (多久)null(全部),小时,天,周,月,年。 如果tbs:qdr部分首先出现其他事情,那么我必须将其移动 q = ...部分。 当然是要考虑的http:// varients。

我正在考虑使用我制作的包含函数来查看此$ url是否需要此处理。但是,它需要捕获“_oogle.com/search?&tbs=qdr:”的可能性。 (以&符号开头)[null |&] tbs = qdr:[null | h | d | w | m | y]。我想在“q =”部分之前可能还有其他参数,但我们稍后会担心。

if (contains($url, "_oogle.com/search?tbs=qdr:"))

function contains($haystack, $needle) {
if(stristr($haystack, $needle) === FALSE) { return false; }
else {return $needle; }  

1 个答案:

答案 0 :(得分:0)

我不知道这是否正是您所寻找的,但您可以尝试在您的参数上使用正则表达式。如果你在q=之前和之后有更多的参数,你将不得不再操纵正则表达式,你将不得不循环一个数组来定义你正在寻找的参数的正确位置。这是你可以做的一个例子。

$baseUrl = 'http://www.google.com';
$parseUrl = parse_url($baseUrl.'/search?&abc=xyz:??????q=hello+there');
preg_match_all('/&?(.*)q=(.*)/',$parseUrl['query'],$matches, PREG_PATTERN_ORDER);
echo $baseUrl.'/search?q='.$matches[2][0].'&'.$matches[1][0];