场景: 在使用sql建模的时候, 需要用户输入计算方法(可以是select查询,也可以是function等等),然后展示在表格中,待多条记录全部提交后, 就再将table中的数据全部提交给后台,后台在textarea中输入带有尖括号或者单双引号的时候, 页面会报错,解决 了报错后, 提交到后台的参数,在浏览器中是可以看到的, 但是后台接收到的却是空的。
点击编辑出现的界面
解决办法:
1、在展示到页面的时候:将尖括号和单双引号转化为< >等
错误如下:
转化的代码如下:
function toTxt(str) { if (!str) return ""; var RexStr = /\<|\>|\"|\‘/g; str = str.replace(RexStr, function (MatchStr) { switch (MatchStr) { case "<": return "<"; case ">": return ">"; case "\"": return """; case "‘": return "‘"; default: return MatchStr; } } ) return str; }
此时在页面中展示的就是带有尖括号和单双引号的数据, 和用户输入的一致
2、此时展示是正常的, 然后解决将数据传给后台,但是后台接收到的是空的问题
此时要将尖括号转化为ASCII 字符,
function escapeText(str) { if (!str) return ""; var arrEntities={‘lt‘:‘<‘,‘gt‘:‘>‘,‘nbsp‘:‘ ‘,‘#39‘:"‘",‘quot‘:‘"‘}; return str.replace(/&(lt|gt|nbsp|#39|quot);/ig,function(all,t){ return arrEntities[t]; }); }
function escapeTableData(jsonDatas) { var jsonData = JSON.parse(jsonDatas) for (var i = 0; i < jsonData.length; i++) { jsonData[i]["validMethod"] = encodeURIComponent(escapeText(jsonData[i]["validMethod"])) jsonData[i]["calMethod"] = encodeURIComponent(escapeText(jsonData[i]["calMethod"])) } console.log(jsonData) return jsonData } var tableData = $("#modelTable").bootstrapTable(‘getData‘); console.log(tableData) var modelTableAll = escapeTableData(JSON.stringify(tableData)); console.log(encodeURIComponent(JSON.stringify(modelTableAll))) //最终要传给后台的值
一定要进行两次encodeURIComponent, 一次的话还是报错
原文:https://www.cnblogs.com/sllzhj/p/12622210.html