<?php
namespace App\EventSubscriber;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpKernel\Event\ResponseEvent;
use Symfony\Component\HttpKernel\KernelEvents;
class CharsetSubscriber implements EventSubscriberInterface
{
public static function getSubscribedEvents(): array
{
return [
KernelEvents::RESPONSE => ['onKernelResponse', 0],
];
}
public function onKernelResponse(ResponseEvent $event): void
{
$response = $event->getResponse();
// S'assurer que le Content-Type inclut UTF-8
$contentType = $response->headers->get('Content-Type');
if ($contentType && strpos($contentType, 'text/html') !== false) {
if (strpos($contentType, 'charset') === false) {
$response->headers->set('Content-Type', 'text/html; charset=UTF-8');
} else {
// Remplacer le charset existant par UTF-8
$contentType = preg_replace('/charset=[^;]+/', 'charset=UTF-8', $contentType);
$response->headers->set('Content-Type', $contentType);
}
} elseif ($contentType && strpos($contentType, 'application/json') !== false) {
if (strpos($contentType, 'charset') === false) {
$response->headers->set('Content-Type', 'application/json; charset=UTF-8');
} else {
$contentType = preg_replace('/charset=[^;]+/', 'charset=UTF-8', $contentType);
$response->headers->set('Content-Type', $contentType);
}
}
// S'assurer que le header est toujours défini pour les réponses HTML
if (!$response->headers->has('Content-Type') &&
strpos($response->getContent(), '<!DOCTYPE') !== false) {
$response->headers->set('Content-Type', 'text/html; charset=UTF-8');
}
}
}