如何在 url 中传递长文件名并使用 php 函数下载文件
How to pass long filename in url and download the file using php function?
我有一个以下函数,可以下载文件名作为 url 中的参数传递的文件。这是代码:
public function actionDownloadFile($filename)
{
$file = Yii::app()->request->getBaseUrl(true) . '/upload/digitaluploads/' . $filename;
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="' . basename($file) . '"');
readfile($file);
}
当用户从视图中单击下载按钮时,将从视图文件调用此函数:
<a class="digital-download" href="<?php echo Yii::app()->request->getBaseUrl('true'); ?>/site/downloadfile/filename/<?php echo urlencode($digital_download['filename']); ?>">Click here to download</a>
这适用于没有空格的文件名,就像它适用于名称为 somefile.mp3
的文件,但它不适用于其中有空格的文件。 即对于名称包含空格的文件失败,例如 'maid with the flaxen hair.mp3'
.
如您所见,我什至使用 urlencode 对 url 中的参数进行了编码。我也尝试在行动中使用解码,但我得到的只是损坏的页面。
任何人?
使用此函数来避免空间和其他可能的问题:
function fullescape($in)
{
$out = '';
for ($i=0;$i<strlen($in);$i++)
{
$hex = dechex(ord($in[$i]));
if ($hex=='')
$out = $out.urlencode($in[$i]);
else
$out = $out .'%'.((strlen($hex)==1) ? ('0'.strtoupper($hex)):(strtoupper($hex)));
}
$out = str_replace('+','%20',$out);
$out = str_replace('_','%5F',$out);
$out = str_replace('.','%2E',$out);
$out = str_replace('-','%2D',$out);
return $out;
}
在这里找到: http://php.net/manual/en/function.urlencode.php
试试这个:
str_replace(' ', '%20', 'your url here');
相关文章:
- 执行php函数的onclick事件的其他替代方案
- 使用ajax用jquery调用php函数
- php函数的ajax html$_POST值返回null
- 如何检查这个代码点火器php函数是否工作,该函数是否在ajax url中使用
- 如何使用OnClick事件通过参数调用来调用PHP函数
- php javascript代码从javascript调用php函数
- 将位置变量从Javascript传递到PHP函数
- 当使用答案运行PHP函数时,会弹出是/否警报
- PHP函数的返回看起来如何对AJAX和PHP有效
- PHP 函数不会向 JavaScript 变量返回值
- 如何从jQuery调用PHP函数
- php函数的XMLHttpRequest响应不包含任何数据
- 如何创建php函数或任何脚本/jquery Javascript,使我能够获取与复选框关联的值并添加它们
- 从Javascript函数调用PHP函数
- 使用Ajax将数组从javascript发布到php函数
- PHP函数识别3个数字中最低的一个并更改其类
- 使用AJAX将变量发布到不同文件上的php函数并调用该函数
- 使用ajax从javascript/jquery调用php函数
- PHP函数调用和Javascript代码中的数组传递
- 如何在关闭浏览器的同时执行php函数