Как Google обрабатывает два одинаковых параметра URL с разными значениями?

Просто взгляните на этот URL, и вы поймете, что я имею в виду.

https://www.google.com/search?q=site%3Aphpjs.org&q=date 

И когда я site:phpjs.org date к этому URL-адресу, поисковый site:phpjs.org date строке поиска Google – это site:phpjs.org date .

Как Google «сгруппирует» два параметра вместе и как это сделать в 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']; ?> <?php echo $_GET['q']; ?> .

Так что происходит, что последнее значение используется, за исключением того, что google удаляет URL-адрес и объединяет значения переменных вместе. Надеюсь, это имеет смысл!