Как мы обнаружили в комментариях, вы можете сделать это:
setlocale(LC_CTYPE, "en_US.UTF-8");
Я получил вдохновение для этого из комментария на странице документа PHP для escapeshellarg
http://php.net/manual/en/function.escapeshellarg.php#99213
Когда escapeshellarg () удалял мои не-ASCII символы из строки UTF-8, добавление следующего исправило проблему: setlocale(LC_CTYPE, "en_US.UTF-8");
Я заметил, что в ваших результатах отладки вы просто повторяли $path
, когда мы действительно хотим видеть результаты escapeshellarg
, которые передаются в командную строку, а не ее ввод. Проверив, что проблема стала более понятной.
Также, когда я проверял это в песочнице, оказалось, что они не удаляются, поэтому я не был уверен, что это сработает. Но я знаю, что при просмотре вещей в Интернете многое зависит от настроек сервера, типов контента и т. Д. В обоих случаях я не могу точно знать, потому что я не знаю, какой сервер (ваш или песочница) установка.
Так что я решил, что стоит упомянуть.
Код песочницы:
echo escapeshellarg("fooščü");
выход
'fooščü' //looks like it didnt remove them
Песочница
Я оставил комментарий выше для потомков.
Лично я никогда не сталкивался с этой проблемой, поэтому я рад, что мы смогли решить ее.
Ура!