2011-12-24 28 views
5

Mam problemy z prawidłowym kodowaniem danych URL. Stosując następujący kod:Kodowanie adresu URL Drupala

$redirect = drupal_urlencode("user/register?destination=/node/1"); 
drupal_goto($redirect); 

ale adres URL, który pojawia się w moim teście przeglądarki jest następujący:

http://testsite.com/user/register%253Fdestination%253D/node/1 

Myślałem, używając funkcji drupal_urlencode powinno rozwiązać ten problem kodowania. Czy ktoś może zaproponować sposób rozwiązania tego problemu?

Odpowiedz

3

Byłbyś lepiej wyłączyć za pomocą wbudowanego w url() funkcji do tworzenia adresu URL, jeśli przekazać tablicę jako parametr query obsługuje kodowanie URL dla Ciebie:

$options = array(
    'absolute' => TRUE, 
    'query' => array('destination' => '/node/1') 
); 
$redirect = url('user/register', $options); 

drupal_goto($redirect); 

drupal_encode() będzie kodować cały ciąg że można przejść do niego, więc jeśli chcesz zrobić to na swój oryginalny sposób by to wyglądać tak:

$redirect = 'user/register?' . drupal_urlencode("destination=/node/1"); 
drupal_goto($redirect);  
+0

To nie jest do końca poprawne, ponieważ [ 'drupal_goto()'] (http://api.drupal.org/api/drupal/ obejmuje--common.inc/function/drupal_goto/6) używa samej funkcji 'url()' na parametrach przekazanych. Właściwym sposobem byłoby przekazanie tablicy parametrów zapytania jako drugiego parametru do 'drupal_goto()'. –

2

Najprostszym sposobem osiągnięcia tego celu jest w Drupal 6:

drupal_goto("user/register","destination=/node/1"); 
0

Poniższy kod z Clive pracował dla mnie ..

$options = array(
    'absolute' => TRUE, 
    'query' => array('destination' => '/node/1') 
); 
$redirect = url('user/register', $options); 

drupal_goto($redirect);