自定义菜单中文乱码

移动开发 码拜 8年前 (2016-04-02) 1199次浏览
以下是本人的代码:
//创建菜单
function createMenu($data){
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, “https://api.weixin.qq.com/cgi-bin/menu/create?access_token=”.ACCESS_TOKEN);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, “POST”);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($ch, CURLOPT_USERAGENT, “Mozilla/5.0 (compatible; MSIE 5.01; Windows NT 5.0)”);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_AUTOREFERER, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$tmpInfo = curl_exec($ch);
if (curl_errno($ch)) {
return curl_error($ch);
}
curl_close($ch);
return $tmpInfo;
}
$data = “{
“button”:[
{
“name”:”会员中心2″,
“sub_button”:[
{
“type”:”view”,
“name”:”register”,
“url”:”http://www.baidu.com”
},
{
“type”:”view”,
“name”:”logon”,
“url”:”http://www.baidu.com”
}]
}]
}”;
echo (createMenu($data));

现在的问题是:$data 里面假如有中文的话,就会提示错误:{“errcode”:65318,”errmsg”:”must use utf-8 charset hint: [hmvZ6a0392vr21]”}
问一下该怎么样解决中文乱码的问题?先谢啦!
解决方案

40

编码问题,WINDOWS系统调用腾讯的接口经常会有中文乱码问题存在,可以在LINUX服务器上试试,假如你不是做功能开发仅做一次菜单创建直接用腾讯的调试工具创建菜单就是了:
地址:http://mp.weixin.qq.com/debug/
接口类型:自定义菜单
接口列表中选择:自定义菜单创建接口
access_token :填写你要创建服务号的有效accesstoken
body :菜单创建的报文,也就是你POST请求菜单创建接口的参数,如:
{
“button”:[
{
“name”:”会员中心2″,
“sub_button”:[
{
“type”:”view”,
“name”:”register”,
“url”:”http://www.baidu.com”
},
{
“type”:”view”,
“name”:”logon”,
“url”:”http://www.baidu.com”
}]
}]
}

40

要输出UTF8格式时,加上以下语句:
header(”Content-Type: text/html; charset=UTF-8″)
php用UTF-8总结:
php文件本身必须是UTF-8编码。不像Java会生成class文件,避免这个问题
php要输出头:header(”Content-Type: text/html; charset=UTF-8″)
meta标签无所谓,有header全部浏览器就会按header来解析
全部外围都得用UTF8,包括数据库、×.js、×.css(CSS影响倒不大)
php本身不是Unicode的,全部substr之类的函数得改成mb_substr(需要装mbstring扩展);或用iconv转码(基本上的linux都装了,没装的话download、tar、make、make install,很简单的)
my.ini:
[MySQL(和PHP搭配之最佳组合)]
default-character-set=utf8
[MySQL(和PHP搭配之最佳组合)d]
default-character-set=utf8
default-storage-engine=MyISAM
在[MySQL(和PHP搭配之最佳组合)d]下加入:
default-collation=utf8_bin
init_connect='SET NAMES utf8'
在需要做数据库操作的php程序前面加上
mb_internal_encoding('utf-8');
create table最后边加上ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin
phpMyAdmin/config.inc.php
$cfg['DefaultCharset'] = 'utf-8';
$cfg['RecodingEngine'] = 'iconv';
phpAdmin导出数据时
把”二进制区域使用十六进制显示”的勾去掉
特别郁闷的:文件系统函数不支持UTF-8!

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明自定义菜单中文乱码
喜欢 (0)
[1034331897@qq.com]
分享 (0)