商品名称使用的是 emoji,存入到数据库是 utf8mb4 格式。使用该格式商品调用微信预支付订单报错: array ( 'return_code' => 'FAIL', 'return_msg' => 'body 不是 UTF8 编码', ) 请问有人知道如何解决吗?
1
honkew 2018-03-06 15:02:52 +08:00
emoji 会丢失吧
|
2
avalon0624 2018-03-06 15:50:52 +08:00
之前的做法是:
将 emoji 转换成字符,存入库中,你可以去搜下,有现成的 |
3
callme OP @avalon0624 我们是把该数据库中的字段设置为 utf8mb4 格式来保存的
|
5
qiyuey 2018-03-06 17:47:45 +08:00
微信这个设计感觉不太合理
|
6
colordog 2018-03-06 18:35:34 +08:00 via iPhone
我想知道支付 post 信息怎么会带 emoji 呢
|
7
winglight2016 2018-03-06 21:20:54 +08:00
自己把商品名称 encode 一下再传给微信,传回来的时候 decode 一下,以上
|
9
cy97cool 2018-03-07 09:21:35 +08:00
写个 filter_emoji 正则替换一下 把 emoji 删了不就行了嘛。。。
def filter_emoji(desstr,restr='emoji'): try: co = re.compile(u'[\U00010000-\U0010ffff]') except re.error: co = re.compile(u'[\uD800-\uDBFF][\uDC00-\uDFFF]') return co.sub(restr, desstr) |
10
zjsxwc 2018-03-07 09:39:15 +08:00
这么处理下就好了,微信标题长度好像也有限制的
$title = mb_substr($title, 0, 10); $title = preg_replace('/[[:^print:]]/', '', $title); |