微信小程序button组件 open-type="getUserInfo"点击无响应
代码部分:<button open-type="getUserInfo" class="p_icon deter" bindgetuserinfo="getUserInfo" hover-class="btn-red">
<view class='p_text'>确定</view>
</button>
getUserInfo: function (e) {
let that=this;
let appget = e.detail;
console.log(appget)
}
1.先确认button的绑定事件有没有生效,没有生效的情况下,问题有几点导致:
a.页面代码错误,这个时候就要仔细阅读官方文档,或者查看官方demo
b.页面绑定的方法内部逻辑是否出错,可以仔细用控制台和debuger检查
c.在一个小程序内如果有很多个button 获取用户信息的组件,也会出现点击无响应的bug,目前不清楚是什么原因,如果有人发 现,请在评论下方留言
这里贴一下我写的前端代码:
2.在确认button的绑定事件生效的情况下,那就要查看在向服务器端传递参数时有没有遗漏,或者编码错误。在服务端确认已经接=收到加密的微信用户后。
3.服务端接收到加密的微信用户信息后,用微信小程序提供的SDK进行解密(SDK小程序官网自行下载,用详细接入文档)。解密完成后获得可以用来保存到数据库的数组,检查字段和表字段的格式是否一致,字符长度等等;
这里是我写服务端的接口代码:
4.在保存的数据库的过程,有一个比较隐秘的问题,插一句->我这里是mysql数据库。微信用户昵称现在丰富多样,一些个性的名称中经常包含有特殊字符,以及emoji表情。一开始我以为纯文本格式完整保存微信用户昵称(emoji表情),看了很多文章才发现,文本和表情的编码不一样:
以下为解决方法:
a.unicode定义的emoji是四个字符,softbank为3个字符,
emoji的四个字符从存储到展示对应没有做过考虑的系统来说,简直就是灾难。unicode emoji是4个字节,softbank定义的emoji占用3个字节存储,通过emoji for php ,我们可以把unicode的emoji方式转换为softbank方式,从而实现不修改数据库,就能存储emoji,相对于数据库层面的解决问题的方式,动作要小的多,并且也不会有性能,运维等方面的问题。但是有个不可避免的问题是,Softbank方式已经不再维护,所以新增加的emoji表情,Softbank中都没有,会造成部分emoji表情丢失的情况,对于这种情况不推荐使用。
b.使用utf8mb4字符集
如果你的mysql版本>=5.5.3
,你可以尝试直接将utf8
直接升级为utf8mb4
字符集
这种4字节的utf8编码可完美兼容旧的3字节utf8字符集,并且可以直接存储emoji表情,是较好的解决方案之一。
至于字节增大带来的性能损耗,根据自己的项目,自己估算吧....
MySQL在5.5.3版本之后增加了这个utf8mb4的编码,mb4就是most bytes 4的意思,专门用来兼容四字节的unicode。其实, utf8mb4是utf8的超集,理论上原来使用utf8,然后将字符集修改为utf8mb4,也会不会对已有的utf8编码读取产生任何问题。 当然,为了节省空间,一般情况下使用utf8也就够了。想了解更多,请前往http://blog.xieyc.com/utf8-and-utf8mb4/
c.使用base64编码
如果你因为某些原因无法使用utf8mb4字符集的话,你还可以使用base64
来曲线救国
使用例如base64_encode
之类的函数编码过后的emoji可以直接存储在utf8字节集的数据表中,取出时decode一下即可
D.针对unicode定义的emoji表情过滤
①.unicode定义的emoji是四个字符,根据这个原理进行过滤
function FilterEmoji($data) { $data = preg_replace_callback( '/./u', function (array $match) {return strlen($match[0]) >= 4 ? '' : $match[0];}, $data ); return $data; }