2016-11-30 12 views
0

Сначала это было preg_replace, не читая арабские символы для имени файла, поэтому при загрузке он показывает только .pdf, поэтому я добавил арабские символы в preg_replace, чтобы получить имя файла как есть. Теперь имя файла отображается как «Ø§ÙÙÙاعداÙØ¹Ø ± Ø¨ÙŠØ © .pdf»preg_replace и file_get_contents, не читающие арабские имена файлов

Я не уверен, что если что-то случилось с моим кодом

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

preg_replace не поддерживает многобайтовые строки, поэтому многобайтные буквы понимаются функцией как отдельные буквы. Вам нужно будет использовать многобайтную совместимую функцию, например mb_ereg_replace.

+0

так вы подразумеваете, что я заменю 'preg_replace' на' mb_ereg_replace', это решит проблему? Или требуется дальнейшие шаги? –

+0

Я считаю, что это должно решить проблему. – Sarmad