用于iOS推送通知的PHP和Java字符串长度阿拉伯文字大小问题

Adi*_*att 4 php java string character-encoding apple-push-notifications

我们通过PHP/Java后端系统发送iOS/Apple设备推送通知.

我们现在面临的问题是,Java具有与PHP不同的多字节字符数.

例如,下面是我们必须发送的阿拉伯语文本,一个来自Java后端,一个来自基于PHP的后端系统(PHP和Java后端 - 两者都不同,彼此没有关系):

???? ???? ??????? ????????? ?????? ?? ???? ???? ????????? ???? ????? ?? ??????-? ????? ??? ??????? ??????

现在,当我们检查字符串长度时:

Java:
length 106 
byte 194

PHP:
length 369
byte 547
Run Code Online (Sandbox Code Playgroud)

现在Apple只允许256 bytesPayload,因此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));
Run Code Online (Sandbox Code Playgroud)

有人有这个问题吗?任何已知的解决方案?

请指教.

Adi*_*att 5

有一个技巧[不确定这是永久性的解决]暂时:将来可能对其他人很方便

评论下面的代码行

//$payload = json_encode($body);
Run Code Online (Sandbox Code Playgroud)

并直接追加 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.'}}';
Run Code Online (Sandbox Code Playgroud)

在这里,$message将是我的Arabic string,它WORKS就像一个魅力!