我的VM上没有本地问题,但在我的开发服务器上,查询被错误编码。在我的一个控制器中,我有一个重定向:
return Redirect::action('CustomerController@index', array('search'=>$term));
在本地,它正确解析为:example.com/customer?search=Smith
在开发服务器上,它正在解析为:example.com/customer?search%3dSmith
我已经尝试深入研究重定向类,并发现toRoute()在哪里有一个替换“不编码”字符串的列表:
protected function toRoute($route, array $parameters, $absolute)
{
$domain = $this->getRouteDomain($route, $parameters);
$uri = strtr(rawurlencode($this->trimUrl(
$root = $this->replaceRoot($route, $domain, $parameters),
$this->replaceRouteParameters($route->uri(), $parameters)
)), $this->dontEncode).$this->getRouteQueryString($parameters);
return $absolute ? $uri : '/'.ltrim(str_replace($root, '', $uri), '/');
}
protected $dontEncode = array(
'%2F' => '/',
'%40' => '@',
'%3A' => ':',
'%3B' => ';',
'%2C' => ',',
'%3D' => '=',
'%2B' => '+',
'%21' => '!',
'%2A' => '*',
'%7C' => '|',
);
但我相信这不适用于getRouteQueryString($ parameters)中url的第二部分;但话说回来,这部分只使用http_build_query而不是rawurlencode的一部分。所以我不知道为什么我传递给路线动作的数组得到'='编码。