2017-09-16 18 views
0

的說我有一個字符串:PHP移動vaiable子,結束串

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

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

我需要移動變量子:[&]abc=xyz:??????刺痛結束。 所以我結束了: 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 // hello + there only example。 https://www._oogle.com/search?tbs=qdr:q=hello+there //...qdr:null|h|d|w|m|y這是過去的網頁搜索。 (多大)null(全部),小時,星期,星期,月,年。 如果tbs:qdr部分首先出現其他問題,所以我必須在q = ...部分後面移動它 。 當然,要考慮的是http:// varients。

我正在考慮使用一個contains函數來查看這個$ 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; } 
+0

感謝馬克,那會是parse_url或parse_str? – user4245782

+0

我會試一試,讓你知道。 – user4245782

+0

好的,所以我應該使用一個函數作爲一個數組將被使用? – user4245782

回答

0

我不知道這是否正是你正在尋找的,但你可以嘗試在你的params上使用正則表達式。如果你在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]; 
+0

是的。你很好。我明白你要去哪裏。我會盡力回答。 1 - 你好每次都有不同。我認爲谷歌,這是BTW,通常以https:開頭,但有時http:進來。只是例如。 abc:xyz:是尋求搜索命中的年齡。它可以被搜索?[null |&] tbs = qdr:[null | h | d | w | m | y]所以簡單性讓我們假設在tbs = qdr部分和q =部分之間沒有任何東西。很高興你進來。我瘋了php功能。最後,我想測試所有這些是否適用於任何給定的$ url? – user4245782