Форма и кодировка $form->label() [РЕШЕНО]

Общие вопросы по использованию фреймворка. Если не знаете как что-то сделать и это про Yii, вам сюда.
Ответить
Vladislav
Сообщения: 14
Зарегистрирован: 2013.10.20, 11:33

Форма и кодировка $form->label() [РЕШЕНО]

Сообщение Vladislav »

Доброго времени суток.

Проблема : кодировка lable формы, юзаю метод $form->label($model, 'текст на кириллице') отдает т�������� о�� к����������������
Все установлено в utf-8, кодировка всех файлов utf-8, Content-Type:text/html; charset=utf8, кодировка браузера тоже utf8. если просто написать в html текст на кириллице все нормально, <?php echo 'текст на кириллице'; ?> тоже все нормально

Тема была затронута тут : viewtopic.php?f=3&t=1108&p=8048,
и предложили решение (viewtopic.php?f=3&t=1108#p25888)
решение такое : echo $form->labelEx($model,'',array('label'=>'текст на кириллице ')); ?> И будет на русском.
но это решение по ряду причин не устраивает

Где копать? Кодировка в БД тут ни при чем, хотя и она в utf-8 тоже. Почему $form->label($model, 'текст на кириллице') отдает т�������� о�� к���������������� ??
Спасибо за помощь.
Последний раз редактировалось Vladislav 2013.11.03, 10:40, всего редактировалось 1 раз.
Rastamans
Сообщения: 14
Зарегистрирован: 2013.10.27, 08:44

Re: Форма и кодировка $form->label()

Сообщение Rastamans »

.htaccsess? посмотрите может там windows-1251 стоит....
Vladislav
Сообщения: 14
Зарегистрирован: 2013.10.20, 11:33

Re: Форма и кодировка $form->label()

Сообщение Vladislav »

Rastamans писал(а):.htaccsess? посмотрите может там windows-1251 стоит....
AddDefaultCharset utf8
C0vax
Сообщения: 42
Зарегистрирован: 2011.08.24, 22:28

Re: Форма и кодировка $form->label()

Сообщение C0vax »

Если кроме вывода подписи из модели везде кодировка правильная - остается только бд. Проверьте не только кодировку самой бд, но и таблиц и текстовых полей в ней. Бывает кодировка таблицы одна, а поле в другой кодировке. И через phpmyadmin посмотрите сами записи в каком виде лежат - возможно квадратики в базу уже приходят из формы, тогда проверять форму и отправку инфы в бд нужно.
Vladislav
Сообщения: 14
Зарегистрирован: 2013.10.20, 11:33

Re: Форма и кодировка $form->label()

Сообщение Vladislav »

C0vax писал(а):Если кроме вывода подписи из модели везде кодировка правильная - остается только бд. Проверьте не только кодировку самой бд, но и таблиц и текстовых полей в ней. Бывает кодировка таблицы одна, а поле в другой кодировке. И через phpmyadmin посмотрите сами записи в каком виде лежат - возможно квадратики в базу уже приходят из формы, тогда проверять форму и отправку инфы в бд нужно.
Кодировка таблицы - utf8_unicode_ci, кодировка поля - utf8_unicode_ci (тип данных - varchar)
Сами записи правильно отображаются, попадают туда не через форму.
dmg
Сообщения: 685
Зарегистрирован: 2012.10.15, 03:09

Re: Форма и кодировка $form->label()

Сообщение dmg »

это все происходит в windows?
можно на всякий случай посмотреть результат вывода в одном view файле

Код: Выделить всё

 <?php echo $form->label($model,'текст на кириллице'); ?>
     <?php echo '  текст на кириллице'; ?>'
потому как в линуксе все нормально...
и вообще - то вторым параметром в label должно идти имя attribute хотите свой делайте по аналогии

Код: Выделить всё

$form->label($model,'',array('label'=>'текст на кириллице '));
посмотрел исходники - отсутствующий label в model приходит к
framework/base/CModel.php

Код: Выделить всё

public function generateAttributeLabel($name){
return ucwords(trim(strtolower(str_replace(array('-','_','.'),' ',preg_replace('/(?<![A-Z])[A-Z]/', ' \0', $name))))); 
}
что для работы с юникодом очень php и ОС зависимо.
Vladislav
Сообщения: 14
Зарегистрирован: 2013.10.20, 11:33

Re: Форма и кодировка $form->label()

Сообщение Vladislav »

dmg писал(а): посмотрел исходники - отсутствующий label в model приходит к
framework/base/CModel.php

Код: Выделить всё

public function generateAttributeLabel($name){
return ucwords(trim(strtolower(str_replace(array('-','_','.'),' ',preg_replace('/(?<![A-Z])[A-Z]/', ' \0', $name))))); 
} 
Ты не поверишь, бувкально 10 минут назад подебажил и тоже дошел до generateAttributeLabel,
пока решил просто заменить таким способом : strtolower заменил на mb_strtolower('','utf-8')
Но что-то мне подсказывает что это на уровне апача нужно настроить дефолтную кодировку для таких ф-й работы со строками.
(default_charset = "UTF-8" не изменил ситуацию). Пока играюсь с http://php.net/manual/en/mbstring.confi ... l-encoding

Меня беспокоит этот вопрос потому что на линуксе такой проблемы нет, и strtolower отдает кириллицу, а на Windows значит нужно настраивать
Vladislav
Сообщения: 14
Зарегистрирован: 2013.10.20, 11:33

Re: Форма и кодировка $form->label()

Сообщение Vladislav »

Вышел из ситуации следующим образом, итог : в php.ini установил mbstring.func_overload = 2. теперь strtolower('латиница') отдает латиницу.

Немного теории. strrolower по-разному работает с латиницей, все зависит от настроек функций работы с мультибайтными строками.

Вот хорошая статья : параграф "Перегрузка/Overload строковых функций PHP mbstring-функциями с поддержкой многобайтных символов"
http://www.php.su/functions/?cat=mbstring

Вот ф-и для диагностики текущих настроек : http://www.php.net/manual/ru/ref.mbstring.php
Ответить