Использование & amp; в URL-адресах ошибка $ _GET

Запустив мой сайт через http://validator.w3.org/check , я получаю много сообщений об ошибках, говорящих, что мои ссылки должны использовать & вместо & .

Поэтому я обновил свой код, только чтобы узнать, что $_GET это не нравится.

Мой URL-адрес: www.mysite.com/?foo=1&bar=2
и я изменил его на это: www.mysite.com/?foo=1&bar=2

Проблема в том, что выполнение print_r($_REQUEST) дает мне этот результат:

 Array ( [foo] => 1 [amp;storeid] => 2 ) 

Почему $_GET , $_POST и $_REQUEST распознают & ?

ОБНОВИТЬ
Это один из способов генерации URL-адреса:

 $url = get_bloginfo('url')."/?foo=".$element['name']."&amp;bar=".$element['id']; $link = '<a href="'.$url.'" title="'.$element['name'].'">'.$element['name'].'</a>'; 

&amp; это ссылка на объект HTML для & . Параметры URL по-прежнему разделяются одним & , но если вы укажете URL-адрес в HTML, вам нужно его закодировать. Для

 <img src="img?width=100&amp;height=100" /> 

браузер затем запрашивает img?width=100&height=100 .

Вы должны быть где-то в двух словах, так что ваша ссылка:

 www.mysite.com/?foo=1&bar=2 

будет выглядеть так:

 www.mysite.com/?foo=1&amp;bar=2 

а потом:

 www.mysite.com/?foo=1&amp;amp;bar=2 

То, что вы читаете, является правильным. Чтобы уточнить, в вашем HTML & должен быть закодирован как &amp; , Конечно, сам URL еще содержит & ; PHP никогда не видит « &amp; », потому что эта кодировка подходит для вашего браузера.

 // Fix for &amp; bug in url if( $_GET ) foreach( $_GET as $key => $value ) { if( strpos( $key, 'amp;' ) === 0 ) { $new_key = str_replace( 'amp;', '', $key ); $_GET[ $new_key ] = $value; unset( $_GET[ $key ] ); } } 

Он не будет работать с filter_input 🙁

В любом случае не рекомендуется кодировать различные URL-адреса руками. Вы должны сделать так:

 $query_string = 'foo=' . urlencode($element['name']) . '&bar=' . urlencode($element['id']); echo '<a href="mycgi?' . htmlspecialchars($query_string) . '">'; 

Я думаю, что это решит ненужные проблемы.