我使用Linux上的Exiv2命令行工具來編輯圖像元數據,像這樣:由如何逃避PHP的exec()命令用引號
exiv2 -M"set Iptc.Application2.Caption String This is my caption....." modify IMG.jpg
我想從PHP執行此,使用字幕提供用戶。這將工作,如果用戶沒有輸入特殊字符:
exec('/usr/local/bin/exiv2 -M"set Iptc.Application2.Caption String '.$caption.'" modify IMG.jpg');
我需要允許用戶特殊字符,如單引號和雙引號。我想使用escapeshellcmd()來防止惡意數據。我怎樣才能正確地逃避命令和參數,使其工作?我嘗試了很多選擇,但我無法做到。
謝謝,這對於理解問題非常有幫助。看起來像exiv2通過允許exiv2命令(設計爲寫入文件)也可以作爲shell參數寫成快捷方式,從而獲得了非標準shell參數。 – Liam 2009-08-11 11:44:27
哦,我試過這個,並沒有保留用戶輸入的雙引號。單引號的榮譽雖然在我的輸入中更爲常見! – Liam 2009-08-11 11:52:16