php – 如何通过包含&符号和/或换行符的ajax传递textarea数
我有一个textarea的形式,我试图通过ajax与jQuery发送.我的问题是textarea包含换行符和&符号(&).
我使用以下js代码获取textarea的值: // Find all the fields with class dirty $('#customer .dirty').each(function() { fieldName = $(this).attr('id'); fieldValue = $(this).val(); // Create an object of dirty field names and values var fields = { 'fieldName' : fieldName,'value' : fieldValue }; // Add the object of field names and values to the custRecordToUpdate array custRecordToUpdate.push(fields); // note: this was initialized before }); var arrayToSend = { customer : custRecordToUpdate }; var dataToSend = JSON.stringify(arrayToSend); textarea值如下: 1/8 CLEAR MIRROR 3/8 CLEAR GLASS 如果我是console.log(dataToSend),我会得到以下内容: {"customer":[{"fieldName":"cust_note","value":"1/8 CLEAR MIRRORn3/8 CLEAR GLASS"}]} 在PHP脚本上,我json_decode发布的数据,它正常工作. 如果我然后将textarea更改为包含&符号,如下所示: 1/8 CLEAR MIRROR 3/8 CLEAR GLASS & GLASS json_decode失败了. console.log(dataToSend)显示以下内容: {"customer":[{"fieldName":"cust_note","value":"1/8 CLEAR MIRRORn3/8 CLEAR GLASS & GLASS"}]} json_last_error()显示语法错误 如果我将上面的js代码更改为: fieldValue = encodeURIComponent($(this).val()); 然后console.log(dataToSend)显示: {"customer":[{"fieldName":"cust_note","value":"1%2F8%20CLEAR%20MIRROR%0A3%2F8%20CLEAR%20GLASS"}]} 和json_decode失败,两个数据情况都有语法错误. 那么,如何通过ajax将包含换行符和&符号的textarea数据发送到php后端,并让json_decode不会失败? 解: 基于下面的一些评论,我决定更改发送数据的ajax代码,这解决了问题,虽然我不知道为什么. 无论如何,这是代码,以防它可以帮助其他人. var returnedHTML = $.ajax({ type: "POST",url: 'index.php/customer/save_edit_customer',//data : "data="+dataToSend,// This is how I was sending it before data : { "data" : dataToSend },// This is the new code that works! async: false,cache: false }).responseText; 解决方法
假设您的文本保存在变量textareaText中,请执行此操作
var val = textareaText.replace('&','__and__'); 将此作为ajax发送 并在服务器端 假设您的json_decode`d值保存在名为$data的变量中,请执行以下操作: $val = str_replace( '__and__','&',$data['value'] ); 通过这种方式,您可以在不让json_decode失败的情况下保留&符号 你可以使用其他东西而不是作为占位符 虽然令人困惑,但为什么它会破裂. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |