我正在写一个amfPHP函数,它应该接受字符串输入。它没有问题需要字母数字字符,但不幸的是,如果我发送“2.UgnFl4kAWovazp_tVo6fHg __。86400.1260025200-571701419”作为参数,它会将数据返回为“2”。
这是函数(真正简单,你可以看到)
function checkOpenSession($guid, $session_key) {
return $session_key;
}
答案 0 :(得分:3)
要绕过此服务浏览器错误,如果您希望参数上的字符串以及此字符串以数字开头,请在服务浏览器上双引号。我通过服务浏览器测试一些方法时遇到同样的问题,并且工作正常。
答案 1 :(得分:1)
我只是通过一个简单的设置尝试了这个,只是将结果写入服务浏览器中的文件,对我来说似乎没问题。所以这个问题似乎就在呼叫结束。
另一种可能性是,由于前导整数,amfphp将返回值的数据类型从字符串更改为int。尝试在返回字符串的开头添加一些字母数字字符,看看它是做什么的。
答案 2 :(得分:1)
此行为实际上存在于AMFPHP服务浏览器(bug)中,因此很容易将其误认为是将数字前导字符串转换为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);
}
}
答案 3 :(得分:-1)
双引号你的字符串......这将有效。