争论]问题目标-C

时间:2011-07-10 18:16:41

标签: php objective-c

我遇到NSProcessInfo's arguments财产时遇到问题。我正在创建一个命令行工具,需要解码它已经使用PHP脚本从互联网传递的base64代码,以及一些其他参数。数据传递正常,但出于某种原因。 [[NSProcessInfo processInfo] arguments]返回21个参数,即使我只传递一个base64字符串。

这是客观方面的一面:

NSArray *arguments = [[NSProcessInfo processInfo] arguments];

if ([[arguments objectAtIndex:1] isEqualToString:@"-s"])
{
    if ([arguments objectAtIndex:2] == nil)
    {
        printf("Error: No data\n");
        [pool drain];
        return 0;
    }

    NSString*data = [arguments objectAtIndex:2];

    if ([data length] == 0)
    {
        printf("Error: No data\n");
        [pool drain];
        return 0;
    }

    NSString*password = @"";

    if ([[arguments objectAtIndex:3] isEqualToString:@"-p"])
    {
        if ([arguments objectAtIndex:4] == nil)
        {
            printf("Error: No password\n");
            [pool drain];
            return 0;
        }
        else
        {
            password = [NSString stringWithString:[arguments lastObject]];
        }
    }

NSLog(@"Args: %i\n\n",[arguments count]); //returns 21? I expect 3.

base64代码有点长,所以我把它here。有谁知道为什么这段代码会返回这么多参数?它应该只是一个字符串? 编辑:我正在PHP脚本中删除空格。见这里:

<?php

$url = $_GET['data'];

$query = "/Library/WebServer/email/emailsender -s";
$password = "-p somePassword";

$commandStr = trim("$query $url $password");

$commandStr = removeNewLines($commandStr);

echo $commandStr;

$output = shell_exec($commandStr);

echo "<pre>Output: $output</pre>";

function removeNewLines($string) {

    $string = str_replace( "\t", ' ', $string );
    $string = str_replace( "\n", ' ', $string );
    $string = str_replace( "\r", ' ', $string );
    $string = str_replace( "\0", ' ', $string );
    $string = str_replace( "\x0B", ' ', $string );

    return $string;

}

?>

2 个答案:

答案 0 :(得分:2)

当我在你的贴图页面上显示Base64字符串为“raw”时,我看到其中有很多空格。因此,arguments很可能是正确的,并且您的PHP脚本以错误的方式调用Objective-C程序。一个简单的解决方法可能是在传递字符串之前删除任何空格,或者正确地将其转义。

答案 1 :(得分:2)

通过命令行向程序发送参数时,每个参数都用空格字符分隔。这意味着如果您发布包含空格的字符串,您的程序会将其解释为多个参数。要防止出现这种情况,您需要引用字符串。