PHP имеет две тесно связанные функции, escapeshellarg() и escapeshellcmd(). Кажется, что они делают подобные вещи, а именно помогают сделать строку более безопасной для использования в system()/exec()/etc.
Какой я должен использовать? Я просто хочу иметь возможность вводить пользовательский ввод и запускать на нем команду, а не все взорвать. Если PHP имел функцию exec-type, которая взяла массив строк (например, argv), который обходит оболочку, я бы использовал это. Подобно функции Python subprocess.call().