Использование e
вызывает оценку как выражение PHP.Таким образом, вы должны использовать:
$filename = preg_replace("/([\\x00-\\x20\\x7f-\\xff" .$reserved . "])/e",
"'_'", $filename); //or "\"_\""; or '"_"' etc.
Еще лучше, если вместо этого вы уберете флаг e
, поскольку он вам не нужен (ваше выражение замены фиксировано; это всегда символ подчеркивания).
$filename = preg_replace("/([\\x00-\\x20\\x7f-\\xff" .$reserved . "])/",
"_", $filename);