4

PHP / Java バックエンド システムを介して iOS / Apple デバイスのプッシュ通知を送信しています。

現在直面している問題は、Java のマルチバイト文字数が PHP とは異なることです。

たとえば、以下は送信する必要があるアラビア語のテキストです。1 つは Java バックエンドから、もう 1 つは PHP ベースのバックエンド システムからのものです (PHP と Java バックエンド - どちらも異なり、相互に関係はありません)。

يبدا بقرص العقيلي واللقيمات وينتهي مع خالد حرية بالامارات نكهة وبهار مع القصار-٦ مساءا على تلفزيون الكويت

ここで、文字列の長さを確認すると、次のようになります。

Java:
length 106 
byte 194

PHP:
length 369
byte 547

現在、Apple256 bytesはペイロードのみを許可しているため、Java バックエンドは上記のアラビア語テキストを完全に送信できますが、PHP では同じことが許可されていません。PHP のテキストを削減する必要があります。

以下は私のPHPコードです:

// PHP Interpretation:
echo $str = 'يبدا بقرص العقيلي واللقيمات وينتهي مع خالد حرية بالامارات نكهة وبهار مع القصار-٦ مساءا على تلفزيون الكويت';

echo '<br><br>';

$payload['aps'] = array('alert' => $str, 'sound' => 'default');
$payload = json_encode($payload);
echo $payload;
echo strlen($payload);

echo '<br><br>';

echo '<br><br>';
echo utf8_encode($str);
echo '<br><br>';
echo json_encode($str);
echo '<br><br>';
echo strlen(json_encode($str));
echo '<br>';
echo strlen(utf8_encode($str));
echo '<br>';
echo mb_strlen(json_encode($str));

誰もこの問題に直面したことがありますか? これに対する既知の解決策はありますか?

お知らせ下さい。

4

2 に答える 2

5

一時的に 1 つのトリックを取得しました [これが恒久的なソリューションかどうかはわかりませんが] : 将来的には他の人にも役立つかもしれません

行のコードの下にコメント

//$payload = json_encode($body);

そして直接追加JSON format to Payload variable:

// static sound and badge commands
$payload = '{"aps":{"alert":"'.$message.'","sound":"default","badge":"+1"}}';

// dynamic sound and badge commands
$payload = '{"aps":{"alert":"'.$message.'","sound":"'.$sound.'","badge":'.$badge.'}}';

ここで、$messageArabic stringとそれWORKSはチャームのようになります!!

于 2013-07-22T09:05:07.250 に答える
0

とても興味深い :-)

私は本当にしばらくの間、そのような素晴らしい答えを探していました.あなたはその日を救いました...バッジはもう機能しませんが. それは私と一緒に次のように動作します:

$badge = 3;
$payload = '{"aps":{"alert":"'.$message.'","sound":"'.$sound.'","badge":'.$badge.'}}';

私は通常、サーバー側に次のバッジ数を計算させます。

于 2013-08-05T10:05:01.710 に答える