2017-05-24 6 views
0

クライアントはサービスを介してデータベースに接続します。何らかのアクションを実行すると、私はfile_get_contentsというサービスURLを呼び出し、応答を処理します。file_get_contentsの奇妙なパラメータをクリアする

ユーザーがGoogle検索結果からサイトに入ると、私はgoogleがfile_get_contentsに属するサービスURLにいくつかのパラメータを追加すると思います。例えば

、 それがあるべきよう、

file_get_contents(service.domain/service_name?param1=0) 

が、Googleは、URLの最後にいくつかの奇妙なパラメータを追加します。このように:

file_get_contents(service.domain/service_name?param1=0&force=1) 

私はどのように私は、これらのパラメータを処理し、削除することができますかわからないので、

force = 1 
gclid=CNC-jvTapbcCFaaj 

を二、三の奇妙なパラメータを見ました。

file_get_contentsでURLを呼び出す前に、これらの奇妙なパラメータを削除するにはどうすればよいですか?

public function getWhere($keyword) 
{ 
    $locale = session('locale'); 
    if($locale != "en" && $locale != "") 
    { 
     $locale = "_".session('locale'); 
    }else{ 
     $locale = ""; 
    } 

    $page = file_get_contents(getenv('API_URL')."station_info?search.url=".$keyword); 
    $page = json_decode($page); 
    $page = (array) $page->rows; 
    $station = $page[0]; 

    if($station->search->status == 1) 
    { 
     return redirect('/'); 
    } 
    return view('station', compact('station', 'locale')); 
} 

奇妙なパラメータが自らURLの末尾に追加:

は、これは私の関数です。

編集

私は、誰かが何かしようとしていると思います。 $ keywordは、駅名(例:ロンドン)の文字列でなければなりません。 しかし、誰かがLondon & force = 1を送信しようとしているので、$ keyword変数をチェックする必要があります。

+0

PHPは、URLを操作するためのいくつかの機能を提供しています。 ['parse_url()'](http://php.net/manual/en/function.parse-url.php)と['' parse_str() '](http://php.net/manual/ja/)を使用してください。 function.parse-str.php)を使用してURLを断片に分解し、パラメータをデコードし、必要に応じてパラメータを変更/削除し、['http_build_query()'](http://php.net/manual/en/function .http-build-query.php)を使って新しいクエリ文字列を生成し、残りのURLに結合します(関数は必要ありません。文字列連結( '.')で十分です)。 – axiac

+0

Googleはあなたのコードに影響しません。あなたのコードがリクエストから全てのパラメータを取得して渡すのであれば、問題はありますが、あなたのコードを見ることはありません。 – Steve

答えて

-1

あなたは、parse_url機能でURLを解析、不要なパラメータを削除するか、単にバック

parse_url機能を使用した後、あなたがparse_str機能によってqueryを解析する必要があるかもしれませんしたいパラメータを維持し、URLを構築し、そのコードは次のようになりますことができます。

$urlParsed = parse_url("service.domain/service_name?param1=0&force=1"); 
$params = parse_str ($urlParsed['query']); 
$newParams = []; 
$neededParams = ['param1', 'param2']; 
foreach ($neededParams as $p) { 
    if (isset($params[$p])) { 
     $newParams[$p] = $params[$p]; 
    } 
} 

$newUrl = $urlParsed['scheme'] . '://' . $urlParsed['host'] . $urlParsed['path'] . '?' . http_build_query($newParams); 

file_get_contents($newUrl); 

私はそのコードをテストしませんでしたが、そのアイデアがはっきりしていて、必要に応じて修正できると思います。

+0

['parse_str()'](http://php.net/manual /en/function.parse-str.php)は何も返しません。 – axiac

+0

URLが間違っているため、正しいURLを使用してください。例えば、http://service.com/service_name?param1 = 0&force = 1' –

+0

あなたはそれを取得しませんでした。これは、 '' void parse_str(string $ encoded_string [、array&$ result]) '](http://php.net/manual/en/function.parse-str.php)です。それは値を返しません、これはどのように動作します。これは引数として受け取る値に依存しません。 – axiac