Запустив мой сайт через 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) . '">';
Я думаю, что это решит ненужные проблемы.