Вы должны URL кодировать и обрезать лишние пробелы перед размещением в заголовке.
$name = rawurlencode(trim($name));
header("Content-Disposition: attachment; filename='{$name}'");
Окончательное решение
$name = $extract['original_name'];
$name2 = urlencode(trim($name));
$name3 = str_replace("+", " ", $name2);
$quote = '"';
header("Content-Disposition: attachment; filename=$quote{$name3}$quote");
Я почти уверен, что вы можете это убрать:
$name = $extract['original_name'];
$name = urlencode(trim($name));
$name = str_replace("+", " ", $name);
header("Content-Disposition: attachment; filename=\"{$name}\"");
И, если кажется, что urlencode не имеет значения, я почти уверен, что вы можете просто сделать это:
$name = $extract['original_name'];
$name = trim($name);
header("Content-Disposition: attachment; filename=\"{$name}\"");