Использование и в 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 не распознают &?

UPDATE
Это один из способов генерации URL-адреса:

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

Ответ 1

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

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

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

Ответ 2

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

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;", потому что эта кодировка подходит для вашего браузера.

Ответ 3

// 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: (

Ответ 4

В любом случае, это не очень хорошая практика для кодирования различных частей URL руками. Вы должны сделать следующее:

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

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