我们正在通过后端系统发送iOS /苹果设备的推送通知。
现在我们面临的问题是,Java的多字节字符数与PHP不同。
例如,下面是我们必须发送的阿拉伯语文本,一个来自Java后端,一个来自基于PHP的后端系统(PHP和Java后端-两者是不同的,彼此没有关系):
يبدا بقرص العقيلي واللقيمات وينتهي مع خالد حرية بالامارات نكهة وبهار مع القصار-٦ مساءا على تلفزيون الكويت
现在,当我们检查字符串长度时:
Java:
length 106
byte 194
PHP:
length 369
byte 547现在苹果只允许有效负载的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));有没有人遇到过这个问题?有什么已知的解决方案吗?
请给我建议。
发布于 2013-07-22 17:05:07
得到一个技巧,虽然暂时不确定这是永久的解决方案:将来可能会对其他人有用
在代码行下面注释
//$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 string,它的WORKS就像一个护身符!
发布于 2013-08-05 18:05:02
非常有趣:-)
我真的在寻找这样一个很棒的答案有一段时间了,你拯救了世界……我猜虽然徽章不再有效了!它对我来说是这样工作的:
$badge = 3;
$payload = '{"aps":{"alert":"'.$message.'","sound":"'.$sound.'","badge":'.$badge.'}}';我通常让服务器端计算下一个徽章计数。
https://stackoverflow.com/questions/17764086
复制相似问题