Чтобы строго соблюдать RFC 3986 (который резервирует !, ', (, ), и *), даже не смотря на то, что символы не используют сформированных URI разделителей, можно безопасно использовать следующее:
function fixedEncodeURIComponent (str) {
return encodeURIComponent(str).replace(/[!'()*]/g, function(c) {
return '%' + c.charCodeAt(0).toString(16);
});
}
<?php
public function actionDownload() {
$path = \Yii::getAlias('@uploads') ;
$file = $path . '/some-file.pdf';
if (file_exists($file)) {
return \Yii::$app->response->sendFile($file);
}
throw new \Exception('File not found');
}