Предупреждение о pack() в скрипте push-уведомлений

Я пишу свой скрипт push-уведомлений на PHP. $deviceToken правильно, но у меня есть предупреждение в этой строке:

$b = pack('H*', str_replace(' ', '', $deviceToken));

предупреждение такое:

Предупреждение: pack() [function.pack]: введите H: недопустимая шестнадцатеричная цифра в /myurl.com/send_push_notification.php в строке 33.

И уведомление не приходит.

Ты знаешь почему?


person JAA    schedule 13.09.2011    source источник
comment
Вам не хватает закрывающего ) (хотя я предполагаю, что это ошибка копирования/вставки, поскольку он не анализируется), а также, что вы получаете, когда вы echo str_replace(' ', '', $deviceToken);?   -  person DaveRandom    schedule 13.09.2011
comment
да, извините, это была ошибка копирования и вставки... конечно, в php-скрипте есть )   -  person JAA    schedule 13.09.2011
comment
Каково значение $deviceToken? Если у него есть 123ABCZ, то Z вызовет предупреждение о недопустимых шестнадцатеричных цифрах. Z будет чем угодно, даже переводом строки/возвратом каретки.   -  person Marc B    schedule 13.09.2011
comment
Кроме того, если он начинается с 0x, он не будет работать (раздражает)   -  person DaveRandom    schedule 13.09.2011
comment
$deviceToken выглядит примерно так: a9e3a660924c2bf96b6540fe78697bed9fe85332e44323cbe4dbd6b04120eaaf   -  person JAA    schedule 13.09.2011
comment
Откуда str_replace? Откуда берутся дополнительные пробелы, которые вы заменяете? Вы уверены, что это пробелы, а не табуляция или какой-то другой пробельный символ?   -  person DaveRandom    schedule 13.09.2011
comment
РЕШЕНО! Извините, в конце $deviceToken был '\n'. Теперь это работает! Прости...   -  person JAA    schedule 13.09.2011


Ответы (4)


У меня такая же проблема. Я закончил тем, что использовал

trim($device_token)

вместо

str_replace(' ', '', $deviceToken)

В итоге исправил проблему.

person яοвοτағτєяаււ    schedule 27.09.2011
comment
Да, это сработало для меня. Пробел находится в конце токена устройства. - person Raptor; 03.09.2012
comment
пока я использую trim($device_token) вместо str_replace(' ', '', $deviceToken), push-уведомления не приходят на устройства iphone - person lalith458; 27.06.2013

У меня такая же проблема. Наконец, я обнаружил, что в моем URL-адресе есть пробел! Итак, просто проверьте свой URL, возможно, это ошибка.

person beaumelon    schedule 07.12.2014

Я также страдал от той же проблемы. Это решило мою проблему. попробуйте использовать код ниже:

chr(0) . chr(0) . chr(32) . pack('H*', str_replace(' ', '', $item[0])) . chr(0) . chr(strlen($payload)) . $payload;  
person Sandeep sidhu    schedule 26.05.2016

Если у кого-то все еще есть эта проблема, попробуйте

$deviceToken = pack('H*', str_replace(' ', '', sprintf('%u', CRC32($deviceToken))));
person azm_shah    schedule 22.10.2019