2012-11-24 491 views
2

我使用cakephp ajax分頁爲我的web應用程序。防止url字符串編碼&到&

在這個應用程序中,我也實現了搜索過濾器。當用戶過濾記錄時,我使用GET方法提交搜索表單,在控制器中我得到過濾器變量並將它們追加到paginator助手中,像這樣。

$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;

任何人都可以幫助如何應對這種情況。

回答

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方法來後我的數據傳回,像這樣在分頁程序選項分頁鏈接: 'data'=>http_build_query($this->request->data),

2

&應將轉換爲&amp;。在HTML代碼中單獨擁有&是不正確的。

這是鏈接應該是什麼樣子的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]gender[1]。 HTML協議在查詢字符串中沒有數組的概念,因此這是傳遞給服務器的確切名稱,但是PHP將解析值並從中創建數組。

+0

親愛Guffa,感謝您的答覆。當我點擊分頁鏈接時,我在我的queryString鍵中獲得額外的** amp; **,並且隨着我點擊分頁鏈接而不斷增長。我編輯了我的問題,請看看獲取參數並建議如何去除這個額外的功放; –

+0

@Danial:在查詢字符串中發送的唯一方法是對'&'進行雙重編碼,最後在代碼中以'& amp;'或'%26amp;'結尾。這裏是例子:http://jsfiddle.net/Guffa/4edbR/ – Guffa