Php zf2重定向,查询字符串包含+;而不是20%
在ZF2中,我知道我可以创建一个301重定向,并附加一个查询字符串,如下所示:Php zf2重定向,查询字符串包含+;而不是20%,php,redirect,zend-framework,zend-framework2,Php,Redirect,Zend Framework,Zend Framework2,在ZF2中,我知道我可以创建一个301重定向,并附加一个查询字符串,如下所示: $options = [ 'query' => [ 'string' => 'hello world', ] ]; return $this->redirect() ->toRoute('myRoute', [], $options) ->setStatusCode(301); 但是,这会重定向到附加
$options = [
'query' => [
'string' => 'hello world',
]
];
return $this->redirect()
->toRoute('myRoute', [], $options)
->setStatusCode(301);
但是,这会重定向到附加了
hello%20world
的URL。在ZF2中,是否有一种方法可以将此重定向写入附加了hello+world
的内容?您的url被正确地url\u encode
d。它被“转换”为URL的有效字符
在接收端,您的“hello%20world”
将作为“hello world”
自动接收
没有什么需要修复的,代码正在按预期工作。由于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;
}
+0实际上,字符串不是
urlencode
d。它是rawurlencode
d,结果是%20
,而不是首选的+
。我们需要一个唯一的URL为每个搜索查询。因此,我们需要重定向到hello+world
,而不是hello%20world
。现有的代码可能会按照最初的预期执行,但我们需要选择urlencode
,而不是rawurlencode
。