2017-10-13 88 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