我正在寫一個應該採取字符串輸入的amfPHP函數。它使用字母數字字符沒有問題,但不幸的是,如果我發送「2.UgnFl4kAWovazp_tVo6fHg __。86400.1260025200-571701419」作爲參數,它將返回數據爲「2」。amfPHP函數輸入問題
這裏是函數(因爲你可以看到真正的簡單)
function checkOpenSession($guid, $session_key) {
return $session_key;
}
我正在寫一個應該採取字符串輸入的amfPHP函數。它使用字母數字字符沒有問題,但不幸的是,如果我發送「2.UgnFl4kAWovazp_tVo6fHg __。86400.1260025200-571701419」作爲參數,它將返回數據爲「2」。amfPHP函數輸入問題
這裏是函數(因爲你可以看到真正的簡單)
function checkOpenSession($guid, $session_key) {
return $session_key;
}
我只是嘗試這樣一個簡單的設置,只是把結果寫入從服務瀏覽器中的文件,並將它似乎是確定爲了我。所以問題似乎是在呼叫端。
另一種可能性是,由於前導整數,amfphp將返回值的數據類型從字符串更改爲int。嘗試在返回字符串的開頭添加一些字母數字字符,然後查看它的作用。
你說得對amfphp,它將字符串更改爲一個整數,當我把字符串放在字符串的開始,它會返回正確的值與我添加的字符串。你知道解決方案或設置,以避免這種情況? (如果我找不到任何解決方案,我會把一個字符作爲臨時解決方案) –
我做了一個快速測試,迴應具有該格式的字符串,並且php似乎沒有將其轉換。那麼你需要從amfphp中找到一個關閉它的設置。我不認爲有一個。它也可能是AS前端進行轉換。你使用AS2還是AS3? AS3應該是安全的。 –
雙引號您的字符串......這將解決它。
此行爲實際上存在於AMFPHP服務瀏覽器(錯誤)中,因此很容易將其誤認爲將數字前導字符串轉換爲int的AMFPHP。但問題在於發送代碼。例如發送通過JSON網關urlencoded的字符串工作正常(目標C代碼):
NSString *theUrl = [[NSString alloc] initWithFormat:@"%@/modules/amfphp/amfphp/json.php/MysqlRemoting.checkAuth/%@/%@/1", kServerBaseUrl, userName, passMD5];
NSString *encodedUrl = [theUrl stringByAddingPercentEscapesUsingEncoding: NSASCIIStringEncoding];
凡passMD5可能有領先的數字。但是,如果我在服務瀏覽器中爲checkAuth方法輸入適當的值,則它會被破壞。
[編輯]
$value = urldecode($value);
if($value != "") {
if($value[0] != '[' && $value[0] != '{' && $value != "null" && $value != "false" && $value != "true") {
$hasAlpha = false;
//check to see if it is a number
$sl = strlen($value);
for ($i = 0; $i < $sl; $i++) {
$char1 = ord($value[$i]);
if($char1 >= 0x30 && $char1 <= 0x39) {
//Then this is a number
} else { //Else leave value as is */
$hasAlpha = true;
}
}
if (!$hasAlpha) $value = json_decode($value, true);
}
else
{
$value = json_decode($value, true);
}
}
2年後,我將證明上述內容的網站(即發送代碼中的內容)移動到新機器上,結果發現問題出在amphphp上(或者也可能是在php 5.3中實現json_decode與5.2中的任何一種)。 ,在amfphp/core/json/app/actions.php中,第48行解碼param並只檢查第一個char,看看它是否應該對它進行json_decode(即去掉一個數字的引號)。任何你得到null的信件(至少在php 5.3上;再一次,它在5.2之前對我有效)下面我評論我對代碼的改變以使其工作。 – ransomweaver
本身移到了答案本身 – ransomweaver
,如果你希望在一個參數字符串要繞過這個服務瀏覽器錯誤,雙引號的服務瀏覽器輸入,然後這個字符串以數字開頭。我遇到了同樣的問題,通過服務瀏覽器測試一些方法,它工作正常。
這看起來很簡單。您可能想要顯示調用方法的代碼以及打印結果的代碼。 –