我正在编写一个amfPHP函数,它应该接受字符串输入。它接受字母数字字符没有问题,但不幸的是,如果我发送"2.UgnFl4kAWovazp_tVo6fHg__.86400.1260025200-571701419“作为参数,它返回的数据为"2”。
下面是函数(如您所见,非常简单)
function checkOpenSession($guid, $session_key) {
return $session_key;
}发布于 2009-12-04 23:57:05
我只是用一个简单的设置尝试了一下,并且只需要将结果从服务浏览器写到一个文件中,这对我来说似乎是可以的。所以问题似乎出在呼叫端。
另一种可能是amfphp将返回值的数据类型从字符串更改为int,这是因为前导整数。尝试在返回字符串的开头添加一个字母数字字符,看看这样做会有什么效果。
发布于 2011-02-10 20:57:12
要绕过此服务浏览器错误,如果您希望参数上有字符串,并且此字符串以数字开头,请将您在服务浏览器上的输入用双引号引起来。我在通过服务浏览器测试一些方法时也遇到了同样的问题,它工作得很好。
发布于 2010-12-29 11:20:54
此行为实际上存在于AMFPHP服务浏览器(Bug)中,因此很容易将其误认为是AMFPHP将数字前导字符串转换为int。然而,问题出在发送代码上。例如,通过json网关发送urlencoded字符串可以正常工作(Objective 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);
}
}https://stackoverflow.com/questions/1847686
复制相似问题