Export Polish Letters in Laravel-Excel - No More Broken Characters!

March 5, 2024

1. Installing the Laravel-Excel Package

 

composer require maatwebsite/excel


2. Creating an Exporter (for Laravel-Excel)

 

php artisan make:export UsersExport --model=User

 

3. Configuring the Exporter

 

...

namespace App\Exports;

use App\Models\User;
use Maatwebsite\Excel\Concerns\FromCollection;

class UsersExport implements FromCollection
{
    public function collection()
    {
        return User::all();
    }
}

 

4. Adding Headers and UTF-8 Encoding

 

...

namespace App\Http\Controllers;

use App\Models\User;
use Illuminate\Http\Response;
use Illuminate\Support\Facades\Response as FacadeResponse;

class ExportController extends Controller
{
    public function exportCsv()
    {
        $users = User::all(['id', 'name', 'email']);

        $csvData = "\xEF\xBB\xBF";
        $csvData .= "ID,First name and last name,Email\n";

        foreach ($users as $user) {
            $csvData .= "{$user->id},\"{$user->name}\",{$user->email}\n";
        }

        return FacadeResponse::make($csvData, 200, [
            'Content-Type'        => 'text/csv; charset=UTF-8',
            'Content-Disposition' => 'attachment; filename="users.csv"',
        ]);
    }
}

 

5. Use ExportController

Now somehow use the ExportController::class, you can do this via routes.

 

6. Notes

The most important chunk is that: 

 

        $csvData = "\xEF\xBB\xBF";
        $csvData .= "ID,First name and last name,Email\n";
        
        ...
        
        'Content-Type'        => 'text/csv; charset=UTF-8',

 

 

Reach out to me! Find me on linkedin!

 

Want to stay updated? Join my newsletter and get a weekly report on the most exciting industry news! 🚀