私のサイト(rillist.com)は、phpを使用してFacebookのURLを取得しています。多くのユーザーが、コピー/貼り付けしているだけなので、誤って余分な文字(?fref = ts)をIDに貼り付けていることに気づきました。
PHPがエコーするものから特定のフレーズを強制する方法はありますか?ありがとうございました
スクリプトで同様の問題に対してこれら 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;
}
これは、正規表現を使用して実現できます。
$bad_url = "rillist.com/?id=el.tee?fref=ts";
$good_url = preg_replace('/(.+\?[^?]+)\?.*/sim', '$1', $bad_url);
私が理解している限り、あなたは次のようなことをしたいと思っています:
$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);
(これはそのまま動作します。変数名が不適切で申し訳ありません)