关于小程序GET的数据中存在json的解决方案
来源:互联网 发布:网络主播沟通技巧 编辑:程序博客网 时间:2024/06/05 11:13
在项目开发中,微信小程序开发
wx.require 中的data 数据中,我尝试使用json 字符串来传递给服务器
既然服务器的接收的数据中正确的。但是无法进行json_decode()
返回的数据:NULL。。
然后使用json_last_error() 来排查。出来的结果是4 (语法错误)
0 = JSON_ERROR_NONE (没有错误)
1 = JSON_ERROR_DEPTH(到达最大堆栈深度)
2 = JSON_ERROR_STATE_MISMATCH (无效或异常的JSON)
3 = JSON_ERROR_CTRL_CHAR(控制字符错误,可能是编码不对)
4 = JSON_ERROR_SYNTAX(语法错误)
5 = JSON_ERROR_UTF8 (异常的UTF-8字符,也许是因为不正确的编码)
上网百度了很久却没有法子。
解决方法:传输前对数据进行base64 加密,在服务器后台再进行解密就可以了。
问题分析,可能在传输过程中,特殊的字符会进行转码。导致json_decode()不成功
在小程序app.js 添加对应的方法, 调用 app.base64encode(str)即可
base64encode:function(str){ var out,i,len,base64EncodeChars="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; var c1,c2,c3; len=str.length; i=0; out=""; while(i<len){ c1=str.charCodeAt(i++)&0xff; if(i==len){ out+=base64EncodeChars.charAt(c1>>2); out+=base64EncodeChars.charAt((c1&0x3)<<4); out+="=="; break; } c2=str.charCodeAt(i++); if(i==len){ out+=base64EncodeChars.charAt(c1>>2); out+=base64EncodeChars.charAt(((c1&0x3)<<4)|((c2&0xF0)>>4)); out+=base64EncodeChars.charAt((c2&0xF)<<2); out+="="; break; } c3=str.charCodeAt(i++); out+=base64EncodeChars.charAt(c1>>2); out+=base64EncodeChars.charAt(((c1&0x3)<<4)|((c2&0xF0)>>4)); out+=base64EncodeChars.charAt(((c2&0xF)<<2)|((c3&0xC0)>>6)); out+=base64EncodeChars.charAt(c3&0x3F); } return out;},base64decode:function(str){ var c1,c2,c3,c4,base64DecodeChars=new Array(-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,62,-1,-1,-1,63,52,53,54,55,56,57,58,59,60,61,-1,-1,-1,-1,-1,-1,-1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,-1,-1,-1,-1,-1,-1,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,-1,-1,-1,-1,-1); var i,len,out; len=str.length; i=0; out=""; while(i<len){ /* c1 */ do{ c1=base64DecodeChars[str.charCodeAt(i++)&0xff]; }while(i<len&&c1==-1); if(c1==-1) break; /* c2 */ do{ c2=base64DecodeChars[str.charCodeAt(i++)&0xff]; }while(i<len&&c2==-1); if(c2==-1) break; out+=String.fromCharCode((c1<<2)|((c2&0x30)>>4)); /* c3 */ do{ c3=str.charCodeAt(i++)&0xff; if(c3==61) return out; c3=base64DecodeChars[c3]; }while(i<len&&c3==-1); if(c3==-1) break; out+=String.fromCharCode(((c2&0XF)<<4)|((c3&0x3C)>>2)); /* c4 */ do{ c4=str.charCodeAt(i++)&0xff; if(c4==61) return out; c4=base64DecodeChars[c4]; }while(i<len&&c4==-1); if(c4==-1) break; out+=String.fromCharCode(((c3&0x03)<<6)|c4); } return out;},utf16to8:function(str){ var out,i,len,c; out=""; len=str.length; for (i=0;i<len;i++){ c=str.charCodeAt(i); if((c>=0x0001)&&(c<=0x007F)){ out+=str.charAt(i); } else if(c>0x07FF){ out+=String.fromCharCode(0xE0|((c>>12)&0x0F)); out+=String.fromCharCode(0x80|((c>>6)&0x3F)); out+=String.fromCharCode(0x80|((c>>0)&0x3F)); } else { out+=String.fromCharCode(0xC0|((c>>6)&0x1F)); out+=String.fromCharCode(0x80|((c>>0)&0x3F)); } } return out;},utf8to16:function(str){ var out,i,len,c; var char2,char3; out=""; len=str.length; i=0; while(i<len){ c=str.charCodeAt(i++); switch (c>>4){ case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7: // 0xxxxxxx out+=str.charAt(i-1); break; case 12: case 13: // 110x xxxx 10xx xxxx char2=str.charCodeAt(i++); out+=String.fromCharCode(((c&0x1F)<<6)|(char2&0x3F)); break; case 14: // 1110 xxxx 10xx xxxx 10xx xxxx char2=str.charCodeAt(i++); char3=str.charCodeAt(i++); out+=String.fromCharCode(((c&0x0F)<<12)|((char2&0x3F)<<6)|((char3&0x3F)<<0)); break; } } return out;}
php后端
进行base64decode解密即可
阅读全文
0 0
- 关于小程序GET的数据中存在json的解决方案
- 关于通过get方法请求json数据出现数据不全的解决方案
- JSON数据中存在单个转义字符“\”的处理
- IOS 返回JSON数据中存在NULL的解决办法
- JSON解析存在的小bug
- 关于Android中JSON数据的操作
- 关于json的小例子
- 数据中存在的假象
- Android中XML和JSON数据的解析小案例
- 程序中关于数据交换的讨论
- 如何判断传过来的JSON数据中,某个字段是否存在
- 如何判断传过来的JSON数据中,某个字段是否存在
- 关于get请求参数的小问题
- 循环中存在的小问题
- 关于json返回日期格式化的解决方案
- 关于json返回日期格式化的解决方案
- 关于json返回日期格式化的解决方案
- 关于JSON返回日期格式化的解决方案
- ProNEST 8.0 and 8.2.2_USB加密锁运行稳定完整版\
- hdu1789 Doing Homework again
- oracle11g rac服务切换测试
- No getter method for property
- 18.Scala中文件的读取、写入、控制台输入操作代码实战
- 关于小程序GET的数据中存在json的解决方案
- HDU 6053 TrickGCD 线性筛 思维 容斥
- AndroidStudio基础教程(二)
- 硅谷来信中对于思维方式的笔记
- java.io——字符流
- Base64 编码图片被自动换行
- 使用Ambari快速部署Hadoop大数据环境
- linux常用命令小教程(系统设置类)
- 懒汉和饿汉单例模式以及单例模式的概念