0

私のサイト(rillist.com)は、phpを使用してFacebookのURLを取得しています。多くのユーザーが、コピー/貼り付けしているだけなので、誤って余分な文字(?fref = ts)をIDに貼り付けていることに気づきました。

PHPがエコーするものから特定のフレーズを強制する方法はありますか?ありがとうございました

4

4 に答える 4

2

スクリプトで同様の問題に対してこれら 2 つの関数を作成しました。彼らはあなたの悩みに必要なものかもしれません。

PS より具体的にして、コード 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; 
  }
于 2012-10-06T20:55:06.220 に答える
0

これは、正規表現を使用して実現できます。

$bad_url = "rillist.com/?id=el.tee?fref=ts";
$good_url = preg_replace('/(.+\?[^?]+)\?.*/sim', '$1', $bad_url);
于 2012-10-06T21:17:22.827 に答える
0

これを行うかなり洗練された方法がありますが、これにはpecl_http拡張必要です。

http_build_url($url, array(), HTTP_URL_STRIP_QUERY)

の PHP ポートはhttp_build_urlここあります。問題なく任意のコードベースにドロップできるはずです...このコードを使用してソリューションを検証しました。

于 2012-10-06T21:38:02.413 に答える
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);

(これはそのまま動作します。変数名が不適切で申し訳ありません)

于 2012-10-06T22:04:02.380 に答える