商品名称使用的是 emoji,存入到数据库是 utf8mb4 格式。使用该格式商品调用微信预支付订单报错: array ( 'return_code' => 'FAIL', 'return_msg' => 'body 不是 UTF8 编码', ) 请问有人知道如何解决吗?
商品名称使用的是 emoji,存入到数据库是 utf8mb4 格式。使用该格式商品调用微信预支付订单报错: array ( 'return_code' => 'FAIL', 'return_msg' => 'body 不是 UTF8 编码', ) 请问有人知道如何解决吗?
|
honkewMar 6, 2018
1
emoji 会丢失吧
|
|
avalon0624Mar 6, 2018
2
之前的做法是:
将 emoji 转换成字符,存入库中,你可以去搜下,有现成的 |
|
3
@avalon0624 我们是把该数据库中的字段设置为 utf8mb4 格式来保存的
|
|
qiyueyMar 6, 2018
5
微信这个设计感觉不太合理
|
|
colordogMar 6, 2018 via iPhone
6
我想知道支付 post 信息怎么会带 emoji 呢
|
|
winglight2016Mar 6, 2018
7
自己把商品名称 encode 一下再传给微信,传回来的时候 decode 一下,以上
|
|
mYYnSmiTEQWcCwArMar 7, 2018
9
写个 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) |
|
zjsxwcMar 7, 2018
10
这么处理下就好了,微信标题长度好像也有限制的
$title = mb_substr($title, 0, 10); $title = preg_replace('/[[:^print:]]/', '', $title); |