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

:

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

이 그럼 당신은 mb_detect_encoding()에 내용을 전달하고 인코딩을 확인하실 수 있습니다 내 대답이 더 이상 적합하지 않도록 질문을 편집하지 마십시오. 새 코드 또는 새 업데이트를 새 섹션으로 추가하십시오. 귀하의 질문 (및 제 대답)이 미래의 방문자를 도울 수 있음을 기억하십시오. 더 이상 이해가되지 않으면 잊지 못할 것입니다. –

+0

나는 이미 업데이트를 확인했다. – MosCH

답변

1

According to the docsmb_detect_encoding($str)에 대한 :

을 문자열 str의 문자 인코딩을 감지합니다.

파일 업로드에 대한

그리고 according to the Laravel 5.1 docs가 :

파일 메소드에 의해 반환되는 객체는 심포니 \ 구성 요소의 인스턴스 \ HttpFoundation는

그래서 위의 코드에서 파일 \의 UploadedFile 클래스 \ $importFile입니다 클래스의 인스턴스. mb_detect_encoding에이를 전달해도 인스턴스가 나타내는 파일의 인코딩이 제공되지는 않습니다.

파일의 내용의 인코딩을 확인하려면, 먼저 그 내용을로드해야합니다 바랍니다

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

답해 주셔서 감사합니다. 하지만 아무것도 바뀌지 않았고 항상 같은 문제가 있습니다. 게시물 업데이트를 확인하십시오. – MosCH

+0

'file_get_contents'가 실제로 작동하는지 확인할 수 있습니까? 예를 들어 콘텐츠를 버리려고하면 가제비가 커야합니다. –

+0

나는 \ File :: get ($ importFile)과 함께 일하고 있는데, 만약 내가 내용을 덤프하면 나는 적당한 것을 볼 수있다. – MosCH