Нашел чуть более элегантное решение:
$name = rawurldecode(basename(rawurlencode($name)));
Пока работает без нареканий.