2017-10-13 39 views
2

フォーラムでの深い調査の後、私の状況に合ったトピックがないので、私はここに私の問題を掲載しています。Laravelでインポートされたファイルのエンコーディングを変更します

Laravelでファイル(csvまたはExcel)をインポートしていますが、私のコントローラではInput::file('file_name')を使用してファイルを取得しています。

ユーザーは、インターフェイスのselectからエンコーディングを選択する必要があります。

私の問題は、ファイルエンコーディングをユーザーが設定したものに変更したいということです。

ここに私のコード私はmb_detect_encoding機能を使用しますが、私は後にチェックすると、私はいつも、私は常にASCIIエンコーディングを持っている...

mb_detect_encoding($str)ため

$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 docs

を文字列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

関連する問題