Использование & in URL вызывает ошибку $ _GET - PullRequest
11 голосов
/ 12 июня 2011

Запуск моего сайта через 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>';

Ответы [ 4 ]

20 голосов
/ 12 июня 2011

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

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

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

4 голосов
/ 12 июня 2011

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

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

1 голос
/ 11 апреля 2013
// 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: (

0 голосов
/ 12 июня 2011

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...