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

发布时间:2022-04-30 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了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 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失败的情况下保留&符号

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

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

脚本宝典总结

以上是脚本宝典为你收集整理的php – 如何通过包含&符号和/或换行符的ajax传递textarea数据?全部内容,希望文章能够帮你解决php – 如何通过包含&符号和/或换行符的ajax传递textarea数据?所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。