sv05.kyoritsu-icom.biz

// ファイルがアップロードされているかチェック
if (!$request->hasFile('csv_file')) {
return response()->json(['message' => 'ファイルが選択されていません'], 400);
}

$file = $request->file('csv_file');

// 文字コードチェック
$rawContent = file_get_contents($file->getPathname());
$encoding = mb_detect_encoding($rawContent, ['UTF-8', 'SJIS', 'EUC-JP', 'ASCII'], true);
if ($encoding !== 'UTF-8') {
return response()->json(['message' => '文字コードがUTF-8ではありません'], 400);
}

// CSVを開く
$handle = fopen($file->getPathname(), 'r');
if (!$handle) {
return response()->json(['message' => 'CSVファイルの読み込みに失敗しました'], 500);
}

// --- BOMの除去処理ここから ---
$firstLine = fgets($handle);
if (strpos($firstLine, "\xEF\xBB\xBF") === 0) {
$firstLine = substr($firstLine, 3); // UTF-8 BOMを除去
}
// fgets() で読み取った行を CSV 配列として再パース(BOM除去後の1行目)
$header = str_getcsv($firstLine);
// --- BOMの除去処理ここまで ---