防止url字符串编码&到&

时间:2012-11-24 06:39:46

标签: html cakephp

我正在为我的网络应用程序使用cakephp ajax分页。

在这个应用程序中,我也实现了搜索过滤器。当用户过滤记录时,我使用GET方法提交搜索表单,在控制器中我获取过滤器变量并将它们附加到paginator helper,如下所示。

$this->paginator->options(array(
    'url' => array_merge($this->passedArgs, array('?'=> $query_string)), 
    'update' => '#tlist', 
    'evalScripts' => true)
);

我的问题是,在我的分页链接中我的所有&被转换成&请参阅下文并查看粗体部分。

<a href="/sites/tutor/users/ajaxtutor/page:2?gender%5B0%5D=1&安培; gender%5B1%5D=2" id="link-1795722171" />;

当我点击链接时,我会得到查询字符串,如下所示:

[gender] => Array
        (
            [0] => 1
        )
[amp;gender] => Array
        (
            [1] => 2
        )

如何从查询字符串中删除这个额外的amp;

任何人都可以帮助解决这种情况。

2 个答案:

答案 0 :(得分:2)

<{1}} 转换为&。在HTML代码中单独使用&amp;是不正确的。

这就是HTML源代码中的链接:

&

因此,如果您在接收数据时遇到问题,那不是因为代码中的<a href="/sites/tutor/users/ajaxtutor/page:2?gender%5B0%5D=1&amp;gender%5B1%5D=2" id="link-1795722171">2 </a>

请注意,查询字符串中的键是&amp;gender[0]。 HTML协议在查询字符串中没有数组的概念,因此这是传递给服务器的确切名称,然而PHP将解析这些值并从中创建数组。

答案 1 :(得分:0)

正如guffa所说,从&&amp;的转换是正确的,因为它是html标准。

问题在于,cakephp挑选了分页链接的href部分,其中包含&amp;代替&并将其放入ajax url部分。见下面的例子:

  • 分页链接:
  • <a href='somedomain.com?&amp;a=1&amp;b=2>1</a>
  • 生成ajax代码:
  • $("#link-1478709635").bind("click", function (event) {
        $.ajax({
            url: "somedomain.com?&amp;a=1&amp;b=2"
        });
        return false;
    
  • 当我们点击该链接时,我会用&amp;代替&

  • 作为一个解决方案,我使用Post方法代替GET方法,在paginator选项中使用分页链接发回我的数据,如下所示: 'data'=>http_build_query($this->request->data),