加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

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

发布时间:2020-12-13 17:07:32 所属栏目:PHP教程 来源:网络整理
导读:我有一个textarea的形式,我试图通过ajax与jQuery发送.我的问题是textarea包含换行符和符号(). 我使用以下js代码获取textarea的值: // Find all the fields with class dirty$('#customer .dirty').each(function() { fieldName = $(this).attr('id'); field
我有一个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失败的情况下保留&符号

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读