我正在编写一个应该接受字符串输入的 amfPHP 函数。它使用字母数字字符没有问题,但不幸的是,如果我发送“2.UgnFl4kAWovazp_tVo6fHg__.86400.1260025200-571701419”作为参数,它将返回数据为“2”。
这是函数(如您所见非常简单)
function checkOpenSession($guid, $session_key) {
return $session_key;
}
要绕过此服务浏览器错误,如果您希望参数中有一个字符串并且该字符串以数字开头,请在服务浏览器上对您的输入进行双引号。我在通过服务浏览器测试某些方法时遇到了同样的问题,它运行良好。
我只是通过简单的设置进行了尝试,然后将结果从服务浏览器写入文件,这对我来说似乎没问题。所以问题似乎出在调用端。
另一种可能性是 amfphp 将返回值的数据类型从字符串更改为 int,因为前导整数。尝试在返回字符串的开头放置一个字母数字字符,看看会发生什么。
这种行为实际上存在于 AMFPHP 服务浏览器中(bug),因此很容易将其误认为是 AMFPHP 正在将数字前导字符串转换为 int。但是问题出在发送代码中。例如,通过 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);
}
}
双引号你的字符串......这将解决它。