2017-01-09 35 views
1

在ZF2重定向,我知道我可以創建一個301重定向與附加這樣的查詢字符串:ZF2包含查詢字符串+代替%20

$options = [ 
    'query' => [ 
     'string' => 'hello world', 
    ] 
]; 

return $this->redirect() 
      ->toRoute('myRoute', [], $options) 
      ->setStatusCode(301); 

然而,這重定向到與hello%20world一個URL追加。在ZF2中,有沒有一種方法可以用附加的hello+world來寫這個重定向呢?

回答

2

由於ZF2不提供使用urlencode而不是rawurlencode來重定向查詢字符串的本地函數,因此我們編寫了一個自定義方法以重定向。不完全漂亮,但現在解決了我們的問題:

private function redirectToPageFive($query) 
{ 
    $location = ($_SERVER['HTTPS'] == 'on' ? 'https://' : 'http://') 
       . $_SERVER['HTTP_HOST'] 
       . '/search?query=' 
       . urlencode($query) 
       . '&page=5'; 

    header("Location: $location", true, 301); 
    exit; 
} 
1

您的網址正在正確url_encode d。它與「轉換」一樣,就像放入URL的有效字符一樣。

在接收端,您的"hello%20world"將自動收到"hello world"

沒有什麼可以解決的,代碼按預期工作。

+1

+0實際上,該字符串不是'urlencode'd。它是'rawurlencode'd,它導致'%20'而不是首選的'+'。每個搜索查詢都需要一個唯一的網址。因此我們需要重定向到'hello + world'而不是'hello%20world'。它存在的代碼可能按照最初的設計執行,但我們需要'urlencode'選項而不是'rawurlencode'。 –