HTTP GET перенаправление не работает - PullRequest
0 голосов
/ 13 апреля 2011

У меня есть страница, которая получает данные, переданные из формы.Он не перенаправляет должным образом со всеми переданными переменными.Я думаю, потому что есть пробелы в передаваемых данных, поэтому URL-адрес разрывается на пробел.Я пытался сделать urlencode, но я не мог заставить его работать должным образом.Я думаю, что мне нужно urlencode переменных, которые были переданы с пробелами в них, но мне нужна ваша помощь.

Ответы [ 3 ]

1 голос
/ 13 апреля 2011

используйте http_build_query

$data = array('foo'=>'bar',
              'baz'=>'boom',
              'cow'=>'milk',
              'php'=>'hypertext processor');

echo http_build_query($data) . "\n";
echo http_build_query($data, '', '&');

?>
The above example will output:
foo=bar&baz=boom&cow=milk&php=hypertext+processor
foo=bar&baz=boom&cow=milk&php=hypertext+processor

для вашего случая

$get_data=$_GET;
echo http_build_query($get_data) . "\n";
echo http_build_query($get_data, '', '&');
1 голос
/ 13 апреля 2011

Есть некоторые проблемы, которые необходимо решить, вот:

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

    if (isset($_GET['aff'])) {
        $aff = $_GET['aff'];
    } else {
        $aff = null;
    }
    

    Вы также можете использовать условный оператор ?: для более короткого варианта этого:

    $aff = isset($_GET['aff']) ? $_GET['aff'] : null;
    
  2. Вам необходимо использовать правильное кодирование значений параметров URL: либо используйте urlencode для кодирования значения в соответствии с application / x-www-form- urnelcoded тип содержимого или rawurlencode для простого процентного кодирования или - при создании всего запроса - http_build_query

    $query = array(
        'pID' => 'sample',
        'email' => isset($_GET['from']) ? $_GET['from'] : null,
        'fname' => isset($_GET['name_(awf_first)']) ? $_GET['name_(awf_first)'] : null,
        'lname' => isset($_GET['name_(awf_last)']) ? $_GET['name_(awf_last)'] : null,
        'addr' => isset($_GET['custom_address']) ? $_GET['custom_address'] : null,
        'city' => isset($_GET['custom_city']) ? $_GET['custom_city'] : null,
        'state' => isset($_GET['custom_state']) ? $_GET['custom_state'] : null,
        'zip' => isset($_GET['custom_zipcode']) ? $_GET['custom_zipcode'] : null,
        'hphone' => isset($_GET['custom_phone_no']) ? $_GET['custom_phone_no'] : null,
        'mphone' => isset($_GET['custom_phone_no']) ? $_GET['custom_phone_no'] : null,
        'country' => 'US',
        'pubSubID' => isset($_GET['meta_adtracking']) ? $_GET['meta_adtracking'] : null,
        'destURL' => 'http://mywebsite.com/page/testpage.php?pubSubID=[pubSubID]&email=[email]'
    );
    $query = http_build_query($query);
    
  3. Вам необходимо использовать правильную кодировку для значения атрибута HTML; используйте htmlspecialchars:

    <META HTTP-EQUIV="refresh" CONTENT="<?php echo htmlspecialchars('0;URL=http://mywebsite.com/page/?'.$query); ?>">
    
0 голосов
/ 13 апреля 2011

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

...&destURL= http%3a%2f%2fmywebsite.com%2fpage%2ftestpage.php%3fpubSubID%3d%5bpubSubID%5d%26email%3d%5bemail%5d
...