2012-08-12 22 views
1

我試圖在PHP中創建shell命令時遇到功能str_replace()的問題。在外殼,當我製表完成有空格的行中,它出現這樣的:使用str_replace刪除exec的空間()

tar cvfz destination/filename.zip source/Name\ Of\ The\+\ Folder 

所以對我來說,這個說,爲了通過exec()運行此命令,我需要更換任何空格我在PHP中會有一個字符串。爲了解決這個問題,我使用

$q = str_replace(' ', '\ ' , $q); 

我分析字符串的開始,以空間格式化爲「\」,而不是「」。我遇到的問題是,這個特定的文件夾,它也消除了加號,以及,它的格式是這樣的:

tar cvfz destination/Name\ Of\ The\ \ \ Folder.tgz source/Name\ Of\ The\ \ \ Folder 

我如何設置此所以str_replace()不排除加標誌?從我有限的測試,到目前爲止,它沒有消除任何出這些:-, %, @, !, (, *,), ^, =

回答

3

使用字符串函數,這是非常錯誤並有可能離開安全漏洞敞開的。

PHP有一個叫做escapeshellarg()函數,不正是你所需要的:

escapeshellarg()增加將字符串和報價單引號/逃脫任何現有的單引號,讓您可以直接傳遞一個字符串到一個shell函數和將其視爲一個安全的論點。這個函數應該被用來將單個參數轉換爲來自用戶輸入的shell函數。

+0

這正是我需要的,謝謝。 – John 2012-08-12 21:25:13