Запустив мой сайт через 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']."&bar=".$element['id']; $link = '<a href="'.$url.'" title="'.$element['name'].'">'.$element['name'].'</a>';
& это ссылка на объект HTML для & . Параметры URL по-прежнему разделяются одним & , но если вы укажете URL-адрес в HTML, вам нужно его закодировать. Для
<img src="img?width=100&height=100" />
браузер затем запрашивает img?width=100&height=100 .
Вы должны быть где-то в двух словах, так что ваша ссылка:
www.mysite.com/?foo=1&bar=2
будет выглядеть так:
www.mysite.com/?foo=1&bar=2
а потом:
www.mysite.com/?foo=1&amp;bar=2
То, что вы читаете, является правильным. Чтобы уточнить, в вашем HTML & должен быть закодирован как & , Конечно, сам URL еще содержит & ; PHP никогда не видит « & », потому что эта кодировка подходит для вашего браузера.
// Fix for & 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) . '">';
Я думаю, что это решит ненужные проблемы.