2011-06-15 122 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