Не ASCII-символы в имени файла пропускаются

Программа youtube-dl Сам по себе поддерживает символы не ASCII в имени файла. Он безупречно работает на моем веб-сервере под пользователем root, а также с пользователем www-data, но когда я пытаюсь загрузить видео с использованием youtube-dl с PHP, символы Non ASCII полностью пропускаются.

Например: Stromae - bâtard будет сохранен как Stromae - btard.mp4 или же البث الحي как .mp4

Я использую этот код для запуска команды CLI

function cmd($string) {
$descriptorspec = array(
0 => array("pipe", "r"),  // stdin
1 => array("pipe", "w"),  // stdout
2 => array("pipe", "w"),  // stderr
);
$process = proc_open($string, $descriptorspec, $pipes);
$stdout = stream_get_contents($pipes[1]);
fclose($pipes[1]);
$stderr = stream_get_contents($pipes[2]);
fclose($pipes[2]);
$ret = proc_close($process);
return $stdout;
}
$value = ('youtube-dl https://some.valid/link');
echo cmd($value);

Просьба сообщить, что я должен сделать, чтобы исправить эту проблему.

1

Решение

Проверьте свой phpinfo (); вывод для настроек LC_ALL или LC_LANG. Я подозреваю, что это не имеет ничего общего с PHP, но с окружающей средой оболочки, которую вы используете по сравнению со средой оболочки, которую использует ваш веб-сервер.

$value = ('LC_ALL=en_US.UTF-8 youtube-dl https://some.valid/link');
echo cmd($value);
2

Другие решения

По умолчанию PHP использует кодировку ISO-8859-1. Сконфигурируйте PHP для использования UTF-8. Вы можете к этому, добавив

mb_internal_encoding("UTF-8");

В начале вашего сценария

1

По вопросам рекламы [email protected]