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

时间:2015-01-23 13:54:16

标签: php curl utf-8

我有一个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()之后。

1 个答案:

答案 0 :(得分:0)

我最终想到了如何修复它:消息来自sql数据库,我只需要添加:

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

在$ db = mysqli_connect()之后。