PHP&;iOS推送通知的Java字符串长度阿拉伯语文本大小问题


PHP & Java string length Arabic text size issue for iOS Push Notifications

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

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

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

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

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

Java:
length 106 
byte 194
PHP:
length 369
byte 547

现在苹果只允许Payload的256 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));

有人面对过这个问题吗?有什么已知的解决方案吗?

请告知。

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

在行代码下方评论

//$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.'}}';

在这里,$message将是我的Arabic stringWORKS就像一个符咒!!

非常有趣:-)

我真的在寻找一个如此棒的答案有一段时间了,而你拯救了这一天。。。我想尽管徽章已经不起作用了!!!它对我来说是这样的:

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

我通常让服务器端计算下一个徽章计数。