2012-08-01 43 views
1
function parseCommandString($str) { 
    $chunks = explode('"', $str); 
    $cmd = array(); 

    // Split the command into space-separated parameters (preserving quoted portions) 
    $c = count($chunks); 
    for($i=0; $i<$c; $i++) { 
     if($i % 2 == 0) { 
      if($chunks[$i] == '') { 
       continue; 
      } 

      $params = explode(' ', $chunks[$i]); 
      $pc = count($params); 
      for($j=0; $j<$pc; $j++) { 
       if($params[$j] != '') { 
        $cmd[] = $params[$j]; 
       } 
      } 
     } else { 
      if($chunks[$i] != '') { 
       $cmd[] = $chunks[$i]; 
      } 
     } 
    } 
    return $cmd; 
} 

看起來很簡單,但我缺乏洞察這是否是我想要做的最好的實現。也就是說,我只需要將一個字符串拆分爲一個子字符串數組,首先通過引號部分,然後通過空格(在非引號部分內,即是)。它意味着像我的網站上的實際命令提示符。添加一個「命令提示符」到我的網站......這是我應該怎麼做?

Insight深表讚賞。

回答

2

這是我會怎麼處理這個項目:

1)啓動與測試。例如。

isEqual(parseCommandString('hello world', ["hello", "world"])); 
isEqual(parseCommandString('hello "world a"', ["hello", "world a"])); 

2)使您的代碼適合這些測試,然後添加更多的角落案例 - 例如未封閉的引號。

如果您要構建的是真正的命令行(即shell),請考慮使用開源項目,例如。 http://code.google.com/p/php-web-shell/

相關問題