首先是preg_replace没有读取文件名的阿拉伯字符,因此下载时只显示.pdf,所以我将阿拉伯字符添加到preg_replace以获取文件名。现在文件名显示为“اÙÙÙاØØØØØØØØØØبية.pdf”
我不确定我的代码是否有任何问题
public function download($id){
$toReturn = study_material::where('id',$id)->first();
if(file_exists('uploads/material/'.$toReturn->material_file)){
$fileName = preg_replace('/[^أ-يa-zA-Z0-9-_\.]/','',$toReturn->material_title). "." .pathinfo($toReturn->material_file, PATHINFO_EXTENSION);
header("Content-Type: application/force-download");
header('Content-Type: text/html; charset=utf-8');
header("Content-Disposition: attachment; filename=" . $fileName);
echo file_get_contents('uploads/material/'.$toReturn->material_file);
}
exit;
}
答案 0 :(得分:1)
preg_replace不支持多字节字符串,因此函数将多字节字母理解为单独的字母。您需要使用多字节兼容函数,如mb_ereg_replace
。