Использование и в 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
&
- ссылка на объект HTML для &
. Параметры URL по-прежнему разделяются одним &
, но если вы укажете URL-адрес в HTML, вам нужно его закодировать. Для
<img src="img?width=100&height=100" />
браузер затем запрашивает img?width=100&height=100
.
Ответ 2
Вы должны быть где-то в двух кодировках, так что ваша ссылка:
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 никогда не видит "&
", потому что эта кодировка подходит для вашего браузера.
Ответ 3
// 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: (
Ответ 4
В любом случае, это не очень хорошая практика для кодирования различных частей URL руками. Вы должны сделать следующее:
$query_string = 'foo=' . urlencode($element['name']) . '&bar=' . urlencode($element['id']);
echo '<a href="mycgi?' . htmlspecialchars($query_string) . '">';
Я думаю, что это решит ненужные проблемы.