我有一个 PHP 脚本,用于向手机发送推送通知消息。我们能够完美地发送和接收正常的消息。但是当我在消息中使用 aphostropice(') 时,我们无法在手机中接收消息。谷歌搜索后,我在 PHP [addslashes($variable_name)] 中找到了一个函数。现在,当我使用此功能时,我们正在接收消息,但并不像预期的那样,这意味着我在通知消息中有撇号 (') 的地方收到“\”。
例如, 1)大家好! - 当我发送此消息时,我们能够收到推送通知消息。
2) 来吧,让我们玩游戏吧! - 当我发送此消息时,首先,我们无法收到消息,但是当我使用 php 函数 [addslashes()] 时,我们收到了消息但不正确, 我们得到这样的消息 - 来吧,让我们玩游戏吧(注意在撇号 (') (Let\'s) 之前有一个反斜杠 ()),这不是正确的消息。
非常感谢任何帮助,提前致谢!!!
我的 PHP 代码:
$msg = $_POST['messageTxt']; // Gets the Notification Message from the User
$message = addslashes($msg);
$device_token ="************************************************************";
$device = $device_token;
$payload['aps'] = array('alert' => $message, 'badge' => +1, 'sound' => 'default');
$payload = json_encode($payload);
$options = array('ssl' => array(
'local_cert' =>'****',
'passphrase' => '*****'
));
/////////////////////////////////////////////////////////////////////////////////
// APNS SERVER CONNECTIVITY //
/////////////////////////////////////////////////////////////////////////////////
$streamContext = stream_context_create();
stream_context_set_option($streamContext, $options);
$apns = stream_socket_client('ssl://gateway.push.apple.com:2195', $error, $errorString, 60, STREAM_CLIENT_CONNECT, $streamContext);
$apnsMessage = chr(0) . chr(0) . chr(32) . pack('H*', str_replace(' ', '', $device)) . chr(0) . chr(strlen($payload)) . $payload;
// echo $apnsMessage.'<br> <br>';
$res=fwrite($apns, $apnsMessage);
$payload ='';
$apnsMessage='';
fclose($apns); // Closes the APNS Sercer Connection
最佳答案
虽然我没有推送消息的具体经验,但我会尝试使用 json“ native ”编码选项解决 json 编码解码问题,而不是 php addslashes()
或任何其他方式。
尝试 json_encode()
选项,特别是:
json_encode($payload, JSON_HEX_QUOT);
我还会测试其他特殊字符(<、>、& 等...)的其他可能问题,并测试相应的 json_encode()
选项。
http://php.net/manual/en/function.json-encode.php (参见参数 int $options = 0
)
http://php.net/manual/en/json.constants.php (参见 JSON_HEX_QUOT、JSON_HEX_TAG、JSON_HEX_AMP、JSON_HEX_APOS,可能还有 JSON_UNESCAPED_SLASHES 与 addslashes()
的结合)
关于php - 当我使用 PHP 发送推送通知消息时获取反斜杠 (\) 和撇号 ('),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32602302/