LINUX.ORG.RU

Symfony 2.5 and UTF8

 , ,


0

1

Вообщем возникла очень не приятная проблема. В базе таблицы utf_8_general_ci , ну и хранит она русский текст без проблем, но вот когда в темплейты начал это все выводить вместо русского текста знаки вопрсов, и думал сначала шаблоны не в той кодировке, но все нормально , пошел в контроллер , сделал echo" Все что угодно " и выдает крокозябры, а если меняю кодировку контроллера на UTF8 BOM, то выдает ошибку

Compile Error: Namespace declaration statement has to be the very first statement in the script

Скорее всего пишет где-то лишний пробел, и не понятно как его убрать, использую phpStorm 7, хотя в Sublime тот же результат.


а если меняю кодировку контроллера на UTF8 BOM, то выдает ошибку

Всё правильно.

Скорее всего пишет где-то лишний пробел, и не понятно как его убрать

Ну так в BOM сохранил, потому и ошибка. А на кодировку пробелы никак не влияют.

Кодировка в заголовках ответа норм? Ну или в мета-теги можно прописать. Это при условии, что кириллица, прописанная прямо в шаблоне, тоже в кракозябры превращается. Иначе надо копать куда-то в другую сторону. Начиная от твига, заканчивая х.з. чем.

Kilte ★★★★★ ()
Ответ на: комментарий от Kilte

Шаблоны чисто в html формате, потому что angular использую, а так просто если в контроллере пишу echo"Текст" то выводит кракозябры, ну а в шаблон если летит, то выводит знаки вопроса, просто не знаю как пофиксить это еще на уровне контроллера.

Berdin ()
Ответ на: комментарий от Berdin

Когда респонс симфониевский создаётся? В каждом контроллере отдельно или где-то в одном месте? Если отдельно, то подписываешься на KernelEvents::RESPONSE и подменяешь заголовок Content-Type, где указываешь кодировку. Не уверен, но должно сработать. Ну а если в одном месте, то достаточно в конструктор прокинуть этот заголовок. Только учти, что если отдаётся что-то кроме html, то нужно будет это проверить.

Kilte ★★★★★ ()
Ответ на: комментарий от Kilte

Response отдается в каждом action контроллера, на front-end, то отправляю json, буду копать в этом направлении.

Berdin ()
Ответ на: комментарий от Berdin

Стоп. По-любому есть какой-нибудь layout. Пробовал задать мета-тег? Что-то вроде:

<meta charset="utf-8"> 
или:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
Потом попробуй вывести напрямую в шаблоне русский текст. Кракозябры должны исчезнуть. Ну и всё равно Content-Type заголовок, который приходит от сервера, когда получаем страницу, должен иметь такое же содержимое. Там уже смотри, такой ли он, если нет, смотри где его можно установить.

Если данные из базы продолжают отображаться не так как нужно, то уже тогда надо будет подумать еще.

Kilte ★★★★★ ()
Ответ на: комментарий от Kilte

В шаблонах мета теги есть , верстальщик и делает так

<meta http-equiv=«Content-Type» content=«text/html; charset=utf-8»>

Что я обнаружил, я когда чисто в методе делаю echo"Текст" то всеровно выдает кракозябры, даже если я в симфони делаю

$response->setCharset('UTF8');

пробовал разные комбинации и uft-8 и UTF-8 - ничего не помогло, мб симфони где-то кеширует мой ответ и он просто отдается в старой кодировке?

Berdin ()
Ответ на: комментарий от Berdin

мб симфони где-то кеширует мой ответ и он просто отдается в старой кодировке?

Ну это вряд-ли. Можешь даже в файрбаге или где-то еще посмотреть заголовки ответа и удостовериться.

$response->setCharset('UTF8');
UTF-8

this

Кстати не знал про setCharset, всегда делал через headers->set('Content-Type', '....')

Еще как вариант попробовать тогда вот эту штуку http://symfony.com/doc/current/reference/configuration/kernel.html#charset

Если и это не помогает, то предлагают вооружиться xdebug'ом или обычным var_dump(...);exit(); и идти от самого начала, где получаем данные. Так уж 99% причина должна быть выявлена. Потому что я больше ничего не могу даже предположить.

Kilte ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.