2012-10-06 46 views
1

我的網站(rillist.com)使用php來獲取facebook URL。 我注意到很多用戶不小心將額外的字符(?fref = ts)粘貼到了id中,因爲它們只是複製/粘貼。刪除URL中的字符(php)

有沒有辦法強制某些短語出什麼PHP回聲? 謝謝

+0

所以你要去掉URL中'?'後面的所有內容? –

+0

是的,甚至包括? – user1576819

+0

strpos substr ..你試過了嗎? – transilvlad

回答

2

我已經爲我的腳本中的類似問題構建了這兩個函數。 他們可能是你的麻煩所需要的。

P.S.請嘗試更具體,並添加一些代碼URL的例子,以幫助教育局更好地理解你想要做的事情。

# Removing param from QUERY_STRING. 
    function unkey_querystring($query_string, $key) { 
    $query_array = array(); 
    parse_str($query_string, $query_array); 

    unset($query_array[$key]); 

    $query_string = http_build_query($query_array); 

    return $query_string; 
    } 

    # Remove param from URL. 
    function unkey_address($url, $key) { 
    $query_string = substr(strstr($url, "?"), 1); 
    $base_url = str_replace($query_string, "", $url); 

    $query_string = unkey_querystring($query_string, $key); 
    return $base_url.$query_string; 
    } 
+0

另一個問題是,我的網址看起來像這樣: http://rillist.com/?id=el.tee 和不受歡迎的url看起來像這樣: http://rillist.com/??id = el.tee?fref = ts – user1576819

+0

你的意思是rillist.com/?id=el.tee&fref=ts有幾個字符串函數,你可以解決所有的麻煩。 http://php.net/manual/en/ref.strings.php – transilvlad

0

你可以做到這一點使用正則表達式:

$bad_url = "rillist.com/?id=el.tee?fref=ts"; 
$good_url = preg_replace('/(.+\?[^?]+)\?.*/sim', '$1', $bad_url); 
0

有一個相當優雅的方式來做到這一點,但需要pecl_http擴展。的http_build_url

http_build_url($url, array(), HTTP_URL_STRIP_QUERY) 

一個PHP端口可以發現here,你應該能夠將其拖放到任意的代碼庫沒有問題......我用這個代碼來驗證我的解決方案。

0

據我瞭解,你想要做的事這樣的:

$url = 'http://facebook.com/page?test=yes&fref=ts'; // the facebook URL 

$_MGET = parse_url($url); // split the URL into path, query and host 

$_MGET = '?'.$_MGET['query']; // re-set $_MGET with a better query 

if(strpos($_MGET, "fref=ts") > 0) { // find out if their is "fref=ts" 
    $before_fref = $_MGET[strpos($_MGET, "fref=ts")-1]; // get character before "fref=ts" 
    $_MGET = str_replace(($before_fref == "?" ? "fref=ts&" : "&fref=ts"), "", $_MGET); // replace "fref=ts" according to previous char 
} 

echo $_MGET; // echo new url 

// unset 
unset($_MGET); 
unset($before_fref); 

(這個作品,不被這個壞變量名對不起)