2017-01-09 22 views
1

In ZF2 enthält, weiß ich, dass ich eine 301-Weiterleitung mit einer Abfragezeichenfolge erstellen kann wie folgt angehängt:ZF2 umleiten mit Query-String + statt% 20

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

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

jedoch leitet diese an eine URL mit hello%20world angehängt . Gibt es in ZF2 eine Möglichkeit, diese Umleitung mit hello+world stattdessen zu schreiben?

Antwort

2

Da ZF2 keine native Funktion zum Umleiten mit einer Abfragezeichenfolge unter Verwendung von urlencode anstelle von rawurlencode bietet, haben wir eine benutzerdefinierte Methode geschrieben, die umleitet. Nicht gerade schön, aber löst jetzt unser Problem:

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

Ihre URL wird richtig angezeigt url_encode d. Es wird genauso wie in gültige Zeichen für eine URL umgewandelt.

Auf der Empfängerseite wird Ihre "hello%20world" automatisch als "hello world" empfangen.

Es gibt nichts zu reparieren, Code funktioniert wie vorgesehen.

+1

+0 Eigentlich ist die Zeichenfolge nicht 'urlencode'd. Es ist 'rawurlencode'd, was zu dem'% 20' statt dem bevorzugten '+' führt. Wir benötigen eine eindeutige URL für jede Suchanfrage. Daher müssen wir auf "hallo + world" statt auf "hallo% 20world" umleiten. Der Code, so wie er existiert, kann so funktionieren, wie er ursprünglich vorgesehen war, aber wir brauchen die Option "urlencode" anstatt "rawurlencode". –