代码之家  ›  专栏  ›  技术社区  ›  Tom

symfony 1.4:是否可以防止转义重定向url?

  •  2
  • Tom  · 技术社区  · 14 年前

    如果我像正常一样执行重定向操作:

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

    …symfony生成正确的url:

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

    然而,以下情况却因为某种奇怪的原因得以逃脱:

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

    …并生成以下URL:

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

    有没有办法避免这种转义,并让与号正确地出现在url中?我想尽了一切办法,结果把我逼疯了。当我从数据库中提取一个保存为字符串的查询并希望将其锁定到url时,我需要这个。我知道我可以从字符串生成一个数组,然后从数组生成一个全新的url,但是由于这种愚蠢的转义,看起来开销很大。

    谢谢。

    2 回复  |  直到 14 年前
        1
  •  1
  •   Raise    14 年前

    当你说“正确地出现”时,你可能会忽略这样一个事实 & 变量分隔符的“正确”表示形式 & 在url中-对于格式良好的x(ht)ml, & 必须编码为 &安培;

    也就是说,脚本中的行为是不寻常的,因为在这两个例子中,您会期望相同的行为。我猜这些并不是将特定的参数路由到路由规则,尽管我希望symfony作为默认值来对变量进行如下的斜切:

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

    不是什么奇怪的php设置干扰了字符串,对吧?

    编辑 :我已经用symfony 1.3.3测试过了,它按照我的建议对变量进行了斜切。我倾向于认为是php/apache设置造成的。检查php.ini文件中的arg_separator.output设置。

        2
  •  1
  •   Matt Sidesinger    14 年前

    我相信这是你最好的选择。

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

    这对我很有用(这些&没有转义到&中)