Метод setCharset
Метод setCharset принадлежит классу Response
и устанавливает кодировку символов для тела ответа.
Первым параметром передаётся строка с названием кодировки,
например 'UTF-8'. Метод возвращает текущий объект
Response, что позволяет выстраивать цепочку вызовов.
Кодировка влияет на заголовок Content-Type,
который отправляется клиенту. По умолчанию Symfony
использует 'UTF-8', поэтому менять её стоит только
при работе с нестандартными кодировками, например
'ISO-8859-1' или 'Windows-1251'.
Если кодировка не задана явно, Symfony берёт значение
из параметра charset конфигурации фреймворка.
Синтаксис
$response->setCharset(string $charset): static
Пример
Давайте создадим ответ и установим ему кодировку
'Windows-1251':
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;
class ArticleController extends AbstractController
{
#[Route('/article', name: 'article_index')]
public function index(): Response
{
$response = new Response('abcde');
$response->setCharset('Windows-1251');
return $response;
}
}
?>
В результате в заголовке Content-Type будет
указана кодировка 'Windows-1251':
Content-Type: text/html; charset=Windows-1251
Пример
Метод возвращает текущий объект, поэтому можно выстроить цепочку вызовов. Установим кодировку и сразу зададим тело ответа:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;
class ArticleController extends AbstractController
{
#[Route('/article', name: 'article_index')]
public function index(): Response
{
return (new Response())
->setCharset('ISO-8859-1')
->setContent('hello');
}
}
?>
Результат выполнения кода:
"hello"
Пример
Давайте создадим сервис, который формирует ответ с кодировкой, отличной от кодировки по умолчанию:
<?php
namespace App\Service;
use Symfony\Component\HttpFoundation\Response;
class ResponseFactory
{
public function create(string $content): Response
{
$res = new Response($content);
$res->setCharset('Windows-1251');
return $res;
}
}
?>
Теперь используем этот сервис в контроллере:
<?php
namespace App\Controller;
use App\Service\ResponseFactory;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;
class ArticleController extends AbstractController
{
#[Route('/article', name: 'article_index')]
public function index(ResponseFactory $factory): Response
{
return $factory->create('article');
}
}
?>
Результат выполнения кода:
"article"
Смотрите также
-
класс
Response,
который представляет HTTP-ответ -
метод
setContent,
который задаёт тело ответа -
метод
getContent,
который возвращает тело ответа -
метод
setStatusCode,
который задаёт статус-код ответа