preg_replace和file_get_contents没有读取阿拉伯文件名

时间:2016-11-30 23:39:20

标签: php utf-8 preg-replace file-get-contents arabic

首先是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;
}

1 个答案:

答案 0 :(得分:1)

preg_replace不支持多字节字符串,因此函数将多字节字母理解为单独的字母。您需要使用多字节兼容函数,如mb_ereg_replace