2009-12-04 47 views
1

我正在寫一個應該採取字符串輸入的amfPHP函數。它使用字母數字字符沒有問題,但不幸的是,如果我發送「2.UgnFl4kAWovazp_tVo6fHg __。86400.1260025200-571701419」作爲參數,它將返回數據爲「2」。amfPHP函數輸入問題

這裏是函數(因爲你可以看到真正的簡單)

function checkOpenSession($guid, $session_key) { 
     return $session_key; 
} 
+0

這看起來很簡單。您可能想要顯示調用方法的代碼以及打印結果的代碼。 –

回答

1

我只是嘗試這樣一個簡單的設置,只是把結果寫入從服務瀏覽器中的文件,並將它似乎是確定爲了我。所以問題似乎是在呼叫端。

另一種可能性是,由於前導整數,amfphp將返回值的數據類型從字符串更改爲int。嘗試在返回字符串的開頭添加一些字母數字字符,然後查看它的作用。

+0

你說得對amfphp,它將字符串更改爲一個整數,當我把字符串放在字符串的開始,它會返回正確的值與我添加的字符串。你知道解決方案或設置,以避免這種情況? (如果我找不到任何解決方案,我會把一個字符作爲臨時解決方案) –

+0

我做了一個快速測試,迴應具有該格式的字符串,並且php似乎沒有將其轉換。那麼你需要從amfphp中找到一個關閉它的設置。我不認爲有一個。它也可能是AS前端進行轉換。你使用AS2還是AS3? AS3應該是安全的。 –

-1

雙引號您的字符串......這將解決它。

1

此行爲實際上存在於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); 
     } 
    } 
+0

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

+0

本身移到了答案本身 – ransomweaver

3

,如果你希望在一個參數字符串要繞過這個服務瀏覽器錯誤,雙引號的服務瀏覽器輸入,然後這個字符串以數字開頭。我遇到了同樣的問題,通過服務瀏覽器測試一些方法,它工作正常。