2017-01-09 34 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'。 –