微信errcode":40033,菜单中出现中文就出错

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wangxinxinsj/article/details/60141917
{"errcode":40033,"errmsg":"invalid charset. please check your request, if include \\uxxxx will create fail! hint: [fr3Pwa0673vr21]"}

菜单创建时带入了地址,但转义后会多出几个转折号,就会出现这种错误提示

{"button":[{"type":"click","name":"5555","value":"http:\/\/www.tp-shop.cn\/index.php\/Mobile\/","key":"home","sub_button":[]},{"type":"view","name":"TPshop\u5546\u57ce","value":"http:\/\/www.tp-shop.cn\/index.php\/Mobile\/"}]}  

用PHP的json_encode来处理中文的时候,中文都会被编码,变成不可读的,类似”\u***”的格式
json_decode时把中文自动进行了unicode编码。
json_encode加上第二可选参数,

json_encode("中文", JSON_UNESCAPED_UNICODE);

这个只是针对php版本在5.4以上的,但我现在的环境是php5.3的

$jsonmenu = decodeUnicode( json_encode($menu_array));
function decodeUnicode($str)
{
    return preg_replace_callback('/\\\\u([0-9a-f]{4})/i',
        create_function(
            '$matches',
            'return mb_convert_encoding(pack("H*", $matches[1]), "UTF-8", "UCS-2BE");'
        ),
        $str);
}

php5.3版本测试可用

tips:查找资料中的先把name字段urlencode后再json_encode转成json格式后再urldecode,这个是没用的,这个可以解决url字段太长的微信错误提示

展开阅读全文

没有更多推荐了,返回首页