2010-04-06 12 views
2

Si je fais une redirection en action normale:Symfony 1.4: Est-il possible d'empêcher l'échappement d'une URL de redirection?

$this->redirect('@mypage?apple=1&banana=2&orange=3'); 

... Symfony produit l'URL correcte:

/something/something?apple=1&banana=2&orange=3 

Cependant, ce qui suit se fait échappé pour une raison bizarre:

$string = 'apple=1&banana=2&orange=3'; 
$this->redirect('@mypage?'.$string); 

... et l'URL suivante est produite:

/something/something?apple=1&banana=2&orange=3 

Existe-t-il un moyen d'éviter cette fuite et de faire apparaître correctement les esperluettes dans l'URL? J'ai essayé tout ce à quoi je pouvais penser et ça me rendait fou. J'ai besoin de ceci pour une situation où je tire une requête enregistrée en tant que chaîne de la base de données et voudrais juste le verrouiller sur l'URL. Je suis conscient que je pourrais générer un tableau à partir de la chaîne, puis générer une toute nouvelle URL à partir du tableau, mais il semble que beaucoup de frais généraux à cause de cette fuite idiote.

Merci.

Répondre

1

Quand vous dites « apparaissent correctement », vous pourriez manquer le fait que & est la représentation « correcte » du séparateur de variable & dans les URL - pour X bien formé (HT) ML, & doit être encodée comme & Cela dit, le comportement dans votre script est inhabituel dans la mesure où vous attendez le même comportement dans les deux exemples. Je suppose que ce ne sont pas des paramètres spécifiques de routage à votre règle de routage, même si je me attends symfony par défaut à slashify vos variables comme ceci:

/something/something/apple/1/banana/2/orange/3 

Il est pas un paramètre de PHP étrange qui est interférer avec vos chaînes, est-il ?

EDIT: J'ai testé avec symfony 1.3.3, et il est slashizing les variables comme je l'ai suggéré. Je suis enclin à penser que c'est un paramètre PHP/Apache qui le cause. Vérifiez votre fichier php.ini pour le paramètre arg_separator.output.

+0

@Raise: Aucun inhabituelles paramètres PHP ou quelque chose comme ça. Par "apparaître correctement", je veux juste dire des esperluettes appropriées qui séparent les paramètres de demande. En ce moment, "& {banana} = {2}" serait compris par symfony comme signifiant "&{amp; banana} = {2}" ce qui est totalement faux. – Tom

+0

Slashifying ... ouais ça passerait par les associations routing.yml. Cependant, j'ai 25 variables enchaînées que je ne veux pas déclarer dans le routage, mais je veux juste garder comme une chaîne de requête GET pour d'autres manipulations. – Tom

+0

N'a pas vraiment résolu mais fermant cette question/marquant ce qui a été accepté. – Tom

1

Je crois que c'est votre meilleur pari.

$url = $this->getController()->genUrl('search/list'); 
$this->redirect($url.'?q='.$q.'&g='.$g); 

Cela fonctionne bien pour moi (les & « s ne sont pas à & se sont échappés ampère)