2013-01-24 46 views
2

找不到任何答案,這在網上,或通過搜索功能,所以我決定張貼:PHP添加字符jQuery.AJAX發佈字符串

我有一個形式,像任何其他,是發佈到CodeIgniter中的AJAX控制器。以下代碼是正在發佈的較大表單的一部分。

<tr> 
    <td><label class="checkbox"><input type="checkbox" name="ef1_active" value="1"></label></td> 
    <td><input type="text" name="ef1_label" value=""></td> 
    <td><select name="ef1_clang" class="input-small">'.$optionlist.'</select></td> 
    <td><label class="checkbox"><input type="checkbox" name="ef1_required" value="1"></label></td> 
</tr> 
<tr> 
    <td><label class="checkbox"><input type="checkbox" name="ef2_active" value="1"></label></td> 
    <td><input type="text" name="ef2_label" value=""></td> 
    <td><select name="ef2_clang" class="input-small">'.$optionlist.'</select></td> 
    <td><label class="checkbox"><input type="checkbox" name="ef2_required" value="1"></label></td> 
</tr> 
<tr> 
    <td><label class="checkbox"><input type="checkbox" name="ef3_active" value="1"></label></td> 
    <td><input type="text" name="ef3_label" value=""></td> 
    <td><select name="ef3_clang" class="input-small">'.$optionlist.'</select></td> 
    <td><label class="checkbox"><input type="checkbox" name="ef3_required" value="1"></label></td> 
</tr> 
<tr> 
    <td><label class="checkbox"><input type="checkbox" name="ef4_active" value="1"></label></td> 
    <td><input type="text" name="ef4_label" value=""></td> 
    <td><select name="ef4_clang" class="input-small">'.$optionlist.'</select></td> 
    <td><label class="checkbox"><input type="checkbox" name="ef4_required" value="1"></label></td> 
</tr> 

窗體被串行化,並推到AJAX要保存與此代碼:

var data = { 
    content : content, 
    property : property, 
    data_type : dataType, 
    form_id : $('#form_id').val() 
}; 


$.ajax({ 
    type: 'POST', 
    url: url, 
    data: data, 
    dataType: 'json', 
    success: function (result) 
    { 

     if(result.html == 'deleted') 
     { 
      window.location.reload(); 
     } 
     else 
     { 
      $('#newForm').html(''); 
     } 

    } 
}); 

的「內容」變量的序列化結果console.logged時:

firstname=1&firstname_required=1&prefix=1&lastname=1&lastname_required=1&homePhone=1&homePhone_required=1&emailAddress=1&emailAddress_required=1&ef1_label=&ef1_clang=Code&ef2_label=&ef2_clang=Code&ef3_label=&ef3_clang=Code&ef4_label=&ef4_clang=Code 

但是,當我用PHP回顯它看起來像這樣:

firstname=1&firstname_required=1&prefix=1&lastname=1&lastname_required=1&homePhone=1&homePhone_required=1&emailAddress=1&emailAddress_required=1&ef1;_label=&ef1_clang=Code&ef2;_label=&ef2_clang=Code&ef3;_label=&ef3_clang=Code&ef4;_label=&ef4_clang=Code 

注意;增加了所有_label變量... 嘗試重命名變量,將它放在窗體的頂部等...沒有任何工作; PHP不斷在這些文本字段上添加;

即使剝離控制器到這一點:

public function save_form_content() 
{  
    print_r($_POST['content']); exit; 
} 

任何人有什麼想法?

在此先感謝!

+0

是什麼你正在嘗試做什麼? –

+0

它就像一個小型表單構建器,表單的頂部是帶有默認表單字段(如firstname等)的複選框。第二部分是可以分配給我們CRM中不同選項字段的額外字段。標記將被保存到數據庫中。 – danny

回答

1

這是CodeIgniter中的一個已知錯誤,這是因爲您正在使用xss_clean()$config['global_xss_filtering'] = TRUE;,請參閱bug report。更新CodeIgniter來解決這個問題,或者如果無法更新整個配置項,請查看Git提交以從提交中應用修補程序。

根據該開發者之一:

應固定由這一個在 系統/核心/ Security.php上線#797替換的regexp:

$str = preg_replace('#(^&\#?[0-9a-z]{2,})([\x00-\x20])*;?#i', '\\1;\\2', $str); 
+0

謝謝!儘管它在這些領域的獨特之處仍然很奇怪...... – danny