好的,所以我在我的應用程序中實現了一些推送通知。我寫了一些應該與MySQL數據庫交互的PHP。base64_decode返回null
我想將設備標記存儲在SQL中作爲字符(64),因爲我已經認爲這是好的(我的意思是,它應該以後以二進制方式發送)。
在iOS端我這樣做:
- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
{
NSString *tokenString = [deviceToken base64EncodedString];
NSDictionary *jsonDic = [NSDictionary dictionaryWithObjectsAndKeys:tokenString, @"Token", [NSNumber numberWithBool:YES], @"IsiDevice", [NSNumber numberWithBool:YES], @"Active", nil];
//... http request stuff
// what might be important is that the POST body is encoded as UTF8 (content-type set appropriately)
}
基於64位的東西由馬特·加拉格爾來自NSData的+ Base64編碼。現在,在PHP端,出現這種情況:
// $tokenEncoded is exactly the same string as I sent from the app (type is string)
$tokenEncoded = $jsonData['Token'];
// $token becomes null! (type is string)
$token = base64_decode($tokenEncoded);
從php.net/manual上BASE64_DECODE的返回值:
返回原始數據或FALSE的失敗。返回的數據可能是二進制的。
現在,我不知道更多的PHP,然後我已經教了自己在過去的兩天,但如果文檔說它應該返回FALSE或原始數據,我發現它非常令人困惑,返回的值是一個空字符串(因爲我非常確定原始數據不是null!)。
由於base64_decoded字符串變爲null,所以當我追加它時顯然是我的整個查詢字符串。這並不能說明一個令人信服的問題。
所以我的問題是,我猜:爲什麼base64_decode返回的東西不應該?一旦我真的從base64_decode中獲取數據,我應該如何將它包含在查詢中,以便將其存儲在數據庫中(只需追加?)?
附加信息: 我正在使用Slim框架。我在一條路線上完成了這一切。 $ jsonData從體內取像這樣:
$jsonBody = Slim::getInstance()->request()->getBody();
$jsonData = json_decode($jsonBody, true);
難道從應用中的一些額外的測試,只是爲了確保沒有得到我的應用程序的執行基地64捏造了起來:
DLOG(@"Device token as NSData: %@", deviceToken);
NSString *base64token = [deviceToken base64EncodedString];
DLOG(@"Device token as base64: %@", base64token);
DLOG(@"Device token back from base64: %@", [NSData dataFromBase64String:base64token]);
輸出:
Device token as NSData: <65625f1c c33b9480 5a46f346 8b2877d0 95e92823 33e88e91 fd3a2abf febad972>
Device token as base64: ZWJfHMM7lIBaRvNGiyh30JXpKCMz6I6R/Toqv/662XI=
Device token back from base64: <65625f1c c33b9480 5a46f346 8b2877d0 95e92823 33e88e91 fd3a2abf febad972>
什麼是輸入exacty? – deceze
SQL中的CHAR(64)'表示64字母長的CHAR,它與base64編碼數據無關。 –
您是否檢查過令牌是您預期的值?在解碼之前先執行'var_dump($ tokenEncoded);'並確保它具有您期望的值。 – Dan