<?php
namespace App\EventSubscriber;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpKernel\Event\ResponseEvent;
use Symfony\Component\HttpKernel\KernelEvents;
class ResponseCharsetSubscriber implements EventSubscriberInterface
{
public function onKernelResponse(ResponseEvent $event): void
{
if (!$event->isMainRequest()) {
return;
}
$response = $event->getResponse();
$contentType = $response->headers->get('Content-Type');
if ($contentType !== null && stripos($contentType, 'text/html') === false) {
return;
}
$response->setCharset('UTF-8');
if ($contentType === null) {
$response->headers->set('Content-Type', 'text/html; charset=UTF-8');
return;
}
if (stripos($contentType, 'charset=') === false) {
$response->headers->set('Content-Type', $contentType . '; charset=UTF-8');
return;
}
$response->headers->set(
'Content-Type',
preg_replace('/charset=([^;]+)/i', 'charset=UTF-8', $contentType)
);
}
public static function getSubscribedEvents(): array
{
return [
KernelEvents::RESPONSE => 'onKernelResponse',
];
}
}