src/EventSubscriber/CharsetSubscriber.php line 18

Open in your IDE?
  1. <?php
  2. namespace App\EventSubscriber;
  3. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  4. use Symfony\Component\HttpKernel\Event\ResponseEvent;
  5. use Symfony\Component\HttpKernel\KernelEvents;
  6. class CharsetSubscriber implements EventSubscriberInterface
  7. {
  8.     public static function getSubscribedEvents(): array
  9.     {
  10.         return [
  11.             KernelEvents::RESPONSE => ['onKernelResponse'0],
  12.         ];
  13.     }
  14.     public function onKernelResponse(ResponseEvent $event): void
  15.     {
  16.         $response $event->getResponse();
  17.         
  18.         // S'assurer que le Content-Type inclut UTF-8
  19.         $contentType $response->headers->get('Content-Type');
  20.         
  21.         if ($contentType && strpos($contentType'text/html') !== false) {
  22.             if (strpos($contentType'charset') === false) {
  23.                 $response->headers->set('Content-Type''text/html; charset=UTF-8');
  24.             } else {
  25.                 // Remplacer le charset existant par UTF-8
  26.                 $contentType preg_replace('/charset=[^;]+/''charset=UTF-8'$contentType);
  27.                 $response->headers->set('Content-Type'$contentType);
  28.             }
  29.         } elseif ($contentType && strpos($contentType'application/json') !== false) {
  30.             if (strpos($contentType'charset') === false) {
  31.                 $response->headers->set('Content-Type''application/json; charset=UTF-8');
  32.             } else {
  33.                 $contentType preg_replace('/charset=[^;]+/''charset=UTF-8'$contentType);
  34.                 $response->headers->set('Content-Type'$contentType);
  35.             }
  36.         }
  37.         
  38.         // S'assurer que le header est toujours défini pour les réponses HTML
  39.         if (!$response->headers->has('Content-Type') && 
  40.             strpos($response->getContent(), '<!DOCTYPE') !== false) {
  41.             $response->headers->set('Content-Type''text/html; charset=UTF-8');
  42.         }
  43.     }
  44. }