Php 用于推送通知的Curl和utf-8

Php 用于推送通知的Curl和utf-8,php,curl,utf-8,Php,Curl,Utf 8,我有一个PHP脚本,旨在向移动应用程序发送推送通知。 标题以utf-8格式正确发送,当我测试utf-8字符串(例如有“accepté”)时,它会正确显示在手机上。但是,由于任何原因,这不适用于消息部分。 发送消息的代码部分如下所示: $data = array( 'Content-Type: text/plain; charset=UTF-8', 'registration_id' => $deviceToken, 'collapse_key' => $col

我有一个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_转换_编码、utf8_编码……都不起作用。我真的不明白的是,为什么这个问题发生在消息而不是标题上

编辑: 我最终找到了解决方法:消息来自sql数据库,我只需要添加:

$query = "SET NAMES UTF8";
mysqli_query($db, $query);
$query = "SET NAMES UTF8";
mysqli_query($db, $query);

就在$db=mysqli_connect()之后。

我最终找到了修复方法:消息来自sql数据库,我只需要添加:

$query = "SET NAMES UTF8";
mysqli_query($db, $query);
$query = "SET NAMES UTF8";
mysqli_query($db, $query);

就在$db=mysqli_connect()之后。

消息部分是否来自数据库?如果是,请确保该字段是UTF-8编码的。标题和信息来自同一个地方吗?另外,当你说你尝试了iconv等,但没有成功,结果是什么?(返回空字符串,仅消除重音字符,未更改任何内容)