我使用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