2011-06-15 161 views
0
 
$str = "Test Artist Test - Test Title Test"; 
$trackinfo = preg_split('/-/', $str); 

exec('metamp3 --title '.$trackinfo[1].' --artist '.$trackinfo[0].' track.mp3'); 

這是我使用的代碼的一個截圖,基本上我很明顯是做錯了什麼(我對PHP很陌生,並且不太瞭解一些使用的約定。我跑這條線,從我可以看到它只會把測試和測試的標題和藝術家(就像它只是採取從字符串的第一個字),但如果我是這樣做PHP字符串空白格式化

print_r $trackinfo; 
print $trackinfo[1]; 
print $trackinfo[0];

我可以清楚地看到拆分字符串格式正確,我想知道是否有人可以解釋這裏發生了什麼,以及我將如何解決它?

謝謝!

回答

3

這不是一個PHP的問題。你傳遞以下字符串,高管:

metamp3 --title Test Title Test --artist Test Artist Test track.mp3 

metamp3程序將只需要第一個單詞的每個參數。該命令應該看起來像metamp3 --title "Test Title Test" ...(引號中的參數值)。

PHP中有函數來解決這個問題:escapeshellarg。這裏是你的代碼是如何可以像:!

exec(
    'metamp3 --title '.escapeshellarg($trackinfo[1]). 
    ' --artist '.escapeshellarg($trackinfo[0]).' track.mp3' 
); 
+0

你真棒先生,我想(希望)會有辦法解決這個問題,但我沒有意識到解決方案,非常感謝! – Lewis 2011-06-15 18:32:14

1

嘗試添加引號:

exec('metamp3 --title "'.$trackinfo[1].'" --artist "'.$trackinfo[0].'" track.mp3'); 
+0

如果有'「'在歌曲名稱符號 – 2011-06-15 18:18:46

+0

@Ivan Nevostruev,是啊,你是正確的您的決定是更好這將失敗 – Karolis 2011-06-15 18:21:58