2017-10-13 93 views
2

經過對論壇的深入研究,我在此處發佈我的問題,因爲沒有與我的情況相符的主題。在Laravel中更改導入的文件編碼

我在Laravel中導入一個文件(csv或Excel),在我的控制器中我使用Input::file('file_name')來獲取文件。

用戶必須有可能從界面中的選擇中選擇他的編碼。

所以我的問題是,我想改變文件編碼,由用戶設置。

我用mb_detect_encoding功能,但我始終如果我檢查後,我有ASCII編碼總是...

這裏我的代碼:

$encoding = Input::get('encoding'); 
$fileContent = \File::get($importFile); 
$importFile = Input::file('import_file'); 
$enc = mb_detect_encoding($fileContent , mb_list_encodings(), true); 
if ($enc !== $encoding){ 
    \File::put($importFile,mb_convert_encoding(\File::get($importFile), $encoding, $enc)); 
} 
+0

請不要編輯你的問題,以便我的答案不再有意義。將新代碼或新更新添加爲新的部分。記住你的問題(和我的答案)可能有助於未來的訪問者,如果它沒有任何意義,它不會有幫助。 –

+0

我已經說過檢查更新。 – MosCH

回答

1

According to the docsmb_detect_encoding($str)

檢測字符串str中的字符編碼

而且according to the Laravel 5.1 docs文件上傳:

由文件方法返回的對象是Symfony的\組件的實例\ HttpFoundation \文件\ UploadedFile的類,所以在上面的代碼中

$importFile是一個類的實例。將它傳遞到mb_detect_encoding將不會給你實例表示的文件的編碼。

要檢查文件的內容的編碼,您需要先加載內容:

$importFile = Input::file('import_file'); 
$fileContent = file_get_contents($importFile->path()); 

然後您可以將內容傳遞給mb_detect_encoding()並檢查編碼:

$enc = mb_detect_encoding($importFile, mb_list_encodings(), true); 
+0

感謝您的回答。但沒有任何改變,我總是有同樣的問題。檢查後更新。 – MosCH

+0

你能確認'file_get_contents'真的有效嗎?例如,嘗試將內容傾倒出來,如果它工作,應該是一大堆垃圾。 –

+0

我正在使用\ File :: get($ importFile),如果我轉儲的內容我可以看到正確的。 – MosCH