如何通过包含&符号和/或换行符的ajax传递textarea数据?

我有一个textarea的forms,我试图通过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 MIRROR\n3/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 MIRROR\n3/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失败的情况下保留&符号

你可以使用其他东西而不是作为占位符

虽然令人困惑,但为什么它会破裂。

我不确定你的物体的形状应该是什么,但如果我改变它对我有用:

 {"customer":[{"fieldName":"cust_note","value":"1/8 CLEAR MIRROR\n3/8 CLEAR GLASS & GLASS"}]} 

 {"customer":{"fieldName":"cust_note","value":"1/8 CLEAR MIRROR\n3/8 CLEAR GLASS & GLASS"}} 

即从json对象中删除array-syntax。

这是我的测试……

  var customer = {"customer":{"fieldName":"cust_note","value":"1/8 CLEAR MIRROR\n3/8 CLEAR GLASS & GLASS"}}; alert(customer.customer.fieldName); alert(customer.customer.value); 

这表明&不是你的问题,而是[]。