このURLを見るだけで、私が何を意味するのかがわかります。
https://www.google.com/search?q=site%3Aphpjs.org&q=date
そして、そのURLにアクセスすると、Googleの検索バーの検索語はですsite:phpjs.org date
。
Googleは2つのパラメータをどのように「モーフィング」しますか?PHPではどのようにそれを行いますか?
スペースをエンコードする代わりに、Googleはq
同じことを達成するために同じ変数を使用します。
残念ながら、PHPにはこれを行う組み込み機能がありません。これは、同じクエリ文字列パラメーターが連続して出現すると、[]
接尾辞が使用されていない限り、最初のパラメーターが上書きされるためです。
次のようなものが必要になります。
$params = array();
foreach (explode('&', $_SERVER['QUERY_STRING']) as $param) {
list($name, $value) = explode('=', $param, 2);
$params[] = array(urldecode($name) => urldecode($value));
}
内容$params
:
array(
array('q' => 'site:phpjs.org'),
array('q' => 'date'),
);
または、ループ本体を次のように変更することもできます。
$params[urldecode($name)][] = urldecode($value);
これは次のように変更$params
されます。
array('q' => array('site:phpjs.org', 'date'));
これにより、次のことが簡単になります。
join(' ', $params['q']);
// "site:phpjs.org date"
提供されたURLの最後の変数の値を常に使用します。これはより標準的な方法であり、この方法で処理するのはGoogleだけではありません。index.php
ルートディレクトリに名前の付いたページを作成して、自分で試すことができます。次に、を介してページにアクセスしますhttp://example.com/index.php?q=John&q=Billy
。index.php内にこれを追加します:<?php echo $_GET['q']; ?>
。
つまり、GoogleがURLを削除し、変数の値を連結することを除いて、最後の値が使用されます。私はそれが理にかなっていることを願っています!