我有一个PHP脚本,旨在向移动应用发送推送通知。 标题在utf-8中正确发送,当我测试utf-8字符串(例如“accepté”)时,它在移动设备上正确显示。但是,出于任何原因,这不适用于消息部分。 发送消息的代码部分如下:
$data = array(
'Content-Type: text/plain; charset=UTF-8',
'registration_id' => $deviceToken,
'collapse_key' => $collapseKey,
'data.message' => $messageText,
'data.title' => 'my title');
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $this->ssl);
if($headers)
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_ENCODING, "UTF-8");
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
我使用echo在$ ch = curl_init()之前打印消息,并且$ data ['data.message']正确输出消息。我尝试了几种解决方案:iconv,mb_convert_encoding,utf8_encode,......没有用。我真正不明白的是,为什么这个问题出现在消息而不是标题上?
编辑: 我最终想出了如何修复它:消息来自一个sql数据库,我只需要添加:
$query = "SET NAMES UTF8";
mysqli_query($db, $query);
在$ db = mysqli_connect()之后。
答案 0 :(得分:0)
我最终想到了如何修复它:消息来自sql数据库,我只需要添加:
$query = "SET NAMES UTF8";
mysqli_query($db, $query);
在$ db = mysqli_connect()之后。