2011-04-13 3 views
0

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

Вот код:

<? 
$aff = $_GET['aff'] ; 
$click_id = $_GET['click_id'] ; 
$email = $_GET['from']; 
$fname = $_GET['name_(awf_first)']; 
$lname = $_GET['name_(awf_last)']; 
$zipcode = $_GET['custom_zipcode']; 
$address = $_GET['custom_address']; 
$phone = $_GET['custom_phone_no']; 
$state = $_GET['custom_state']; 
$city = $_GET['custom_city']; 
$subid = $_GET['meta_adtracking'] ; 
$cblink = $_GET['cblink']; 
$keyword = $_GET['keyword'] ; 
$keyword = eregi_replace('[^a-z0-9 ]', '2', $keyword); 
?> 
<META HTTP-EQUIV="refresh" CONTENT=0;URL="http://mywebsite.com/page/?pID=sample&email=<?print $email?>&fname=<?print $fname?>&lname=<?print $lname?>&addr=<?print $address?>&city=<?print $city?>&state=<?print $state?>&zip=<?print $zipcode?>&hphone=<?print $phone?>&mphone=<?print $phone?>&country=US&pubSubID=<?print $subid?>&destURL=http://mywebsite.com/page/testpage.php?pubSubID=[pubSubID]&email=[email]"> 
<html> 
<body> 
</body></html> 
+0

пожалуйста, всегда помечать вопросы с языком программирования, который вы используете, или более конкретного тега, чтобы не тратить драгоценное время на людей –

+0

Пожалуйста, добавьте встроенный код не в качестве внешнего образа .. – plaes

+0

I жаль, что я не знаю, как добавить код inline – artur

ответ

0

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

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

Переадресация происходит после пользователь отправляет форме свои пробелы в переданных данных, что вызывает разрыв в URL-адресе, и поэтому все данные не передаются. Я знаю, мне нужно, чтобы url кодировал все переменные GET, но я не могу сделать это правильно – artur

+0

Из вашего исходного вопроса я не думал, что это PHP. Так что кто-то еще должен ответить, как сделать URL-кодирование в PHP ...: p – alienhard

1

использования 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, '', '&amp;'); 

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

для случая

$get_data=$_GET; 
echo http_build_query($get_data) . "\n"; 
echo http_build_query($get_data, '', '&amp;'); 
+0

почему downvoted ?? пожалуйста, объясните – diEcho

+0

кто-то другой сделал это. – artur

+0

, но кто бы ни опустил, пожалуйста, объясните, что они слишком находят нашу ошибку сами. – diEcho

1

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

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

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

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

    $aff = isset($_GET['aff']) ? $_GET['aff'] : null; 
    
  2. Вам нужно использовать правильное кодирование по значениям параметра URL: либо используйте urlencode для кодирования значения в соответствии с application/x-www-form-urnelcoded content type или rawurlencode для простого percent-encoding или - при построении всего запроса - 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

+1, отличный ответ. –

+0

Вы можете показать мне полный образец того, как страница должна быть отредактирована, чтобы выглядеть с кодом – artur

+0

@artur: вы можете взять второй и последний фрагменты кода, чтобы получить желаемый результат. – Gumbo

Смежные вопросы