diff --git a/src/Symfony/Bundle/TwigBundle/Controller/ExceptionController.php b/src/Symfony/Bundle/TwigBundle/Controller/ExceptionController.php index 9f1edad12c8d..39d4aee102b5 100644 --- a/src/Symfony/Bundle/TwigBundle/Controller/ExceptionController.php +++ b/src/Symfony/Bundle/TwigBundle/Controller/ExceptionController.php @@ -51,7 +51,7 @@ public function showAction(Request $request, FlattenException $exception, DebugL $code = $exception->getStatusCode(); - return new Response($this->twig->render( + return Response::create($this->twig->render( (string) $this->findTemplate($request, $request->getRequestFormat(), $code, $this->debug), array( 'status_code' => $code, @@ -60,7 +60,7 @@ public function showAction(Request $request, FlattenException $exception, DebugL 'logger' => $logger, 'currentContent' => $currentContent, ) - )); + ))->setCharset('UTF-8'); } /** diff --git a/src/Symfony/Bundle/TwigBundle/Tests/Controller/ExceptionControllerTest.php b/src/Symfony/Bundle/TwigBundle/Tests/Controller/ExceptionControllerTest.php index 20646f74aad6..6cdb02f99deb 100644 --- a/src/Symfony/Bundle/TwigBundle/Tests/Controller/ExceptionControllerTest.php +++ b/src/Symfony/Bundle/TwigBundle/Tests/Controller/ExceptionControllerTest.php @@ -39,6 +39,7 @@ public function testOnlyClearOwnOutputBuffers() $request->headers->set('X-Php-Ob-Level', 1); $controller = new ExceptionController($twig, false); - $controller->showAction($request, $flatten); + $response = $controller->showAction($request, $flatten); + $this->assertEquals('UTF-8', $response->getCharset(), 'Request charset is explicitly set to UTF-8'); } } diff --git a/src/Symfony/Bundle/WebProfilerBundle/Controller/ExceptionController.php b/src/Symfony/Bundle/WebProfilerBundle/Controller/ExceptionController.php index 0b5db752ee7f..abd75d440ee0 100644 --- a/src/Symfony/Bundle/WebProfilerBundle/Controller/ExceptionController.php +++ b/src/Symfony/Bundle/WebProfilerBundle/Controller/ExceptionController.php @@ -62,16 +62,17 @@ public function showAction($token) $code = $exception->getStatusCode(); - return new Response($this->twig->render( - $template, - array( + return Response::create( + $this->twig->render($template, array( 'status_code' => $code, 'status_text' => Response::$statusTexts[$code], 'exception' => $exception, 'logger' => null, 'currentContent' => '', - ) - ), 200, array('Content-Type' => 'text/html')); + )), + 200, + array('Content-Type' => 'text/html') + )->setCharset('UTF-8'); } /** @@ -97,10 +98,14 @@ public function cssAction($token) if (!$this->templateExists($template)) { $handler = new ExceptionHandler(); - return new Response($handler->getStylesheet($exception), 200, array('Content-Type' => 'text/css')); + $response = new Response($handler->getStylesheet($exception), 200, array('Content-Type' => 'text/css')); + } else { + $response = new Response($this->twig->render('@WebProfiler/Collector/exception.css.twig'), 200, array('Content-Type' => 'text/css')); } - return new Response($this->twig->render('@WebProfiler/Collector/exception.css.twig'), 200, array('Content-Type' => 'text/css')); + $response->setCharset('UTF-8'); + + return $response; } protected function getTemplate() diff --git a/src/Symfony/Bundle/WebProfilerBundle/Controller/ProfilerController.php b/src/Symfony/Bundle/WebProfilerBundle/Controller/ProfilerController.php index 173616fd9f50..2c0d7a795e4d 100644 --- a/src/Symfony/Bundle/WebProfilerBundle/Controller/ProfilerController.php +++ b/src/Symfony/Bundle/WebProfilerBundle/Controller/ProfilerController.php @@ -99,16 +99,20 @@ public function panelAction(Request $request, $token) throw new NotFoundHttpException(sprintf('Panel "%s" is not available for token "%s".', $panel, $token)); } - return new Response($this->twig->render($this->getTemplateManager()->getName($profile, $panel), array( - 'token' => $token, - 'profile' => $profile, - 'collector' => $profile->getCollector($panel), - 'panel' => $panel, - 'page' => $page, - 'request' => $request, - 'templates' => $this->getTemplateManager()->getTemplates($profile), - 'is_ajax' => $request->isXmlHttpRequest(), - )), 200, array('Content-Type' => 'text/html')); + return Response::create( + $this->twig->render($this->getTemplateManager()->getName($profile, $panel), array( + 'token' => $token, + 'profile' => $profile, + 'collector' => $profile->getCollector($panel), + 'panel' => $panel, + 'page' => $page, + 'request' => $request, + 'templates' => $this->getTemplateManager()->getTemplates($profile), + 'is_ajax' => $request->isXmlHttpRequest(), + )), + 200, + array('Content-Type' => 'text/html') + )->setCharset('UTF-8'); } /** @@ -147,9 +151,13 @@ public function infoAction($about) $this->profiler->disable(); - return new Response($this->twig->render('@WebProfiler/Profiler/info.html.twig', array( - 'about' => $about, - )), 200, array('Content-Type' => 'text/html')); + return Response::create( + $this->twig->render('@WebProfiler/Profiler/info.html.twig', array( + 'about' => $about, + )), + 200, + array('Content-Type' => 'text/html') + )->setCharset('UTF-8'); } /** @@ -197,13 +205,17 @@ public function toolbarAction(Request $request, $token) // the profiler is not enabled } - return new Response($this->twig->render('@WebProfiler/Profiler/toolbar.html.twig', array( - 'position' => $position, - 'profile' => $profile, - 'templates' => $this->getTemplateManager()->getTemplates($profile), - 'profiler_url' => $url, - 'token' => $token, - )), 200, array('Content-Type' => 'text/html')); + return Response::create( + $this->twig->render('@WebProfiler/Profiler/toolbar.html.twig', array( + 'position' => $position, + 'profile' => $profile, + 'templates' => $this->getTemplateManager()->getTemplates($profile), + 'profiler_url' => $url, + 'token' => $token, + )), + 200, + array('Content-Type' => 'text/html') + )->setCharset('UTF-8'); } /** @@ -241,15 +253,19 @@ public function searchBarAction(Request $request) $token = $session->get('_profiler_search_token'); } - return new Response($this->twig->render('@WebProfiler/Profiler/search.html.twig', array( - 'token' => $token, - 'ip' => $ip, - 'method' => $method, - 'url' => $url, - 'start' => $start, - 'end' => $end, - 'limit' => $limit, - )), 200, array('Content-Type' => 'text/html')); + return Response::create( + $this->twig->render('@WebProfiler/Profiler/search.html.twig', array( + 'token' => $token, + 'ip' => $ip, + 'method' => $method, + 'url' => $url, + 'start' => $start, + 'end' => $end, + 'limit' => $limit, + )), + 200, + array('Content-Type' => 'text/html') + )->setCharset('UTF-8'); } /** @@ -279,18 +295,22 @@ public function searchResultsAction(Request $request, $token) $end = $request->query->get('end', null); $limit = $request->query->get('limit'); - return new Response($this->twig->render('@WebProfiler/Profiler/results.html.twig', array( - 'token' => $token, - 'profile' => $profile, - 'tokens' => $this->profiler->find($ip, $url, $limit, $method, $start, $end), - 'ip' => $ip, - 'method' => $method, - 'url' => $url, - 'start' => $start, - 'end' => $end, - 'limit' => $limit, - 'panel' => null, - )), 200, array('Content-Type' => 'text/html')); + return Response::create( + $this->twig->render('@WebProfiler/Profiler/results.html.twig', array( + 'token' => $token, + 'profile' => $profile, + 'tokens' => $this->profiler->find($ip, $url, $limit, $method, $start, $end), + 'ip' => $ip, + 'method' => $method, + 'url' => $url, + 'start' => $start, + 'end' => $end, + 'limit' => $limit, + 'panel' => null, + )), + 200, + array('Content-Type' => 'text/html') + )->setCharset('UTF-8'); } /** @@ -364,7 +384,7 @@ public function phpinfoAction() phpinfo(); $phpinfo = ob_get_clean(); - return new Response($phpinfo, 200, array('Content-Type' => 'text/html')); + return Response::create($phpinfo, 200, array('Content-Type' => 'text/html'))->setCharset('UTF-8'); } /** diff --git a/src/Symfony/Bundle/WebProfilerBundle/Controller/RouterController.php b/src/Symfony/Bundle/WebProfilerBundle/Controller/RouterController.php index f4a84bf56873..800f209a6ffa 100644 --- a/src/Symfony/Bundle/WebProfilerBundle/Controller/RouterController.php +++ b/src/Symfony/Bundle/WebProfilerBundle/Controller/RouterController.php @@ -68,10 +68,14 @@ public function panelAction($token) $request = $profile->getCollector('request'); - return new Response($this->twig->render('@WebProfiler/Router/panel.html.twig', array( - 'request' => $request, - 'router' => $profile->getCollector('router'), - 'traces' => $matcher->getTraces($request->getPathInfo()), - )), 200, array('Content-Type' => 'text/html')); + return Response::create( + $this->twig->render('@WebProfiler/Router/panel.html.twig', array( + 'request' => $request, + 'router' => $profile->getCollector('router'), + 'traces' => $matcher->getTraces($request->getPathInfo()), + )), + 200, + array('Content-Type' => 'text/html') + )->setCharset('UTF-8'); } } diff --git a/src/Symfony/Bundle/WebProfilerBundle/Tests/Controller/ProfilerControllerTest.php b/src/Symfony/Bundle/WebProfilerBundle/Tests/Controller/ProfilerControllerTest.php index c10449d323ce..3338d8c53b46 100644 --- a/src/Symfony/Bundle/WebProfilerBundle/Tests/Controller/ProfilerControllerTest.php +++ b/src/Symfony/Bundle/WebProfilerBundle/Tests/Controller/ProfilerControllerTest.php @@ -69,6 +69,7 @@ public function testReturns404onTokenNotFound() $response = $controller->toolbarAction(Request::create('/_wdt/found'), 'found'); $this->assertEquals(200, $response->getStatusCode()); + $this->assertEquals('UTF-8', $response->getCharset(), 'Request charset is explicitly set to UTF-8'); $response = $controller->toolbarAction(Request::create('/_wdt/notFound'), 'notFound'); $this->assertEquals(404, $response->getStatusCode());